Работа с моделью ASP.NET MVC

253
07 мая 2017, 22:43

Предположим, есть некоторая модель MyModel, которая содержит поле _count типа int.

public class MyModel
{
    private int _count;
    public int Count
    {
        get { return _count; }
        set { _count= value; }
    }        
}

Я хочу визуализировать эту модель. Через контроллер передаю туда _myModel, которую перед этим создаю. Например, так:

    public ActionResult Index()
    {
        MyModel _myModel= new MyModel ();
        return View(_myModel);
    }

На странице при этом находится кнопка, нажатие которой обрабатывается так:

    [HttpPost]
    public ActionResult CountUp(ViewModel model)
    {
        model.Count += 1;
        return View(model);
    }

Один раз это работает, а потом каждый раз создается модель по новой, в которой все значений ставятся по умолчанию. Я не понимаю, кто ее просит? Я не хочу каждый раз новую модель, я хочу, чтобы визуализировался Сount, который каждый раз будет увеличиваться по нажатию.

Answer 1

Это происходит потому, что вы не сохраняете текущее состояние модели. ASP не находя в форме никаких значений создает модель, заполняя поля значениями по умолчанию.

Для решения добавьте в форму скрытое поле для дальнейшей передачи, но при таком подходе данные легко поменять, открыв html.

View

@model MyModel
...
<div>Count: @Model.Count </div>
...
@using (Html.BeginForm("ControllerName", "CounUp", FormMethod.Post))
{
   @Html.HiddenFor(x => x.Count)
   <button type="submit">Увеличить значение</button>
}
...

И еще. Вы говорите

Предположим, есть некоторая модель MyModel

А принимаете

public ActionResult CountUp(ViewModel model)

Следовало бы заменить на

public ActionResult CountUp(MyModel model)
Answer 2

Проверьте view: CountUp, каждый ли раз кнопка отправляет POST запрос.

По идее получается так:

  1. Сначала отправляется GET запрос по роуту Controller.Index и получает view: Controller/Index.cshtml
  2. Затем вы жмёте кнопку и попадаете на роут Controller.CountUp и получает view: Controller/CountUp.cshtml
  3. На этом шаге вы видите увеличенный номер на 1.
  4. Скорее всего view CountUp.cshtml делает get запрос по роуту Controller.Index
READ ALSO
Свернуть окно в трей [WPF]

Свернуть окно в трей [WPF]

Казалось бы банальный вопрос, но гугл показывает лишь решения для WinForm

464
Запуск метода за два дня до установленной даты C#

Запуск метода за два дня до установленной даты C#

Как запускать какой либо метод в определенное время каждый день? Например у меня есть сегодняшняя дата 0605

200
Присвоить переменной значение ячейки

Присвоить переменной значение ячейки

Доброго времени суток) Подскажите как получить значение из таблицы и присвоить его переменной но мне кажется это можно сделать хранимой...

201