[HttpPost] public ActionResult Create(FormCollection collection)VERSUS [HttpPost] public ActionResult Create(Dinner dinner)

时间:2010-12-21 06:18:28

标签: asp.net-mvc asp.net-mvc-2

在Scott Hanselman的书(第1章)中,他为我们提供了两种方法来实现[HttpPost]来创建动作方法。

第一个依赖于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 action method arg传递的模型如下:

        [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 个答案:

答案 0 :(得分:5)

如果所有必需的数据都在Request.Form,路由数据或URL查询字符串中,那么您可以像第二个示例中那样使用模型绑定。

模型绑定器创建您的晚餐对象,并通过匹配属性名称使用请求中的数据填充它。

您可以使用“白名单”,“黑名单”,前缀和标记界面自定义绑定过程。 只需确保您不会无意中绑定值 - 请参阅此link