[HttpPost] public ActionResult Create (коллекция FormCollection) VERSUS [HttpPost] public ActionResult Create (ужин с ужином) - PullRequest
6 голосов
/ 21 декабря 2010

В книге Скотта Хансельмана (глава 1) он предоставляет нам два варианта реализации [HttpPost] для метода действия Create.

Первый использует TryUpdateModel для обновления объекта модели на основе полей входящей формы. Если входящие поля формы содержат неверные данные, для ModelState.IsValid будет установлено значение false.

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            Dinner dinner = new Dinner();

            if (TryUpdateModel(dinner))
            {
                dinnerRepository.Add(dinner);

                dinnerRepository.Save();

                return RedirectToAction("Details", new { id = dinner.DinnerId });
            }
            else
                return View(dinner);

        }

Второй метод заключается в использовании модели, переданной как метод действия Create, следующим образом:

        [HttpPost]
        public ActionResult Create(Dinner dinner)
        {
            if (ModelState.IsValid)
            {
                dinnerRepository.Add(dinner);

                dinnerRepository.Save();

                return RedirectToAction("Details", new { id = dinner.DinnerId });
            }
            else
                return View(dinner);
        }

Какой из них больше рекомендуется использовать в производстве?

1 Ответ

5 голосов
/ 21 декабря 2010

Если все необходимые данные находятся либо в Request.Form, либо в данных маршрута, либо в строке запроса URL-адреса, вы можете использовать привязку модели, как во втором примере.

Связыватель модели создает ваш обеденный объект и заполняет его данными из запроса, сопоставляя имена свойств.

Вы можете настроить процесс привязки с помощью «белых списков», «черных списков», префиксов и интерфейсов маркеров. Просто убедитесь, что вы случайно не связываете значения - см. ссылку .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...