2010-12-21 48 views
6

在Scott Hanselman的书(第1章)中,他为我们提供了两个选项来实现[HttpPost]创建操作方法。[HttpPost] public ActionResult创建(FormCollection集合)VERSUS [HttpPost] public ActionResult创建(晚餐晚餐)

第一个依靠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); 

     } 

第二种方法是利用作为创建操作方法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); 
     } 

哪一个更在生产中使用?

回答

5

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

模型联编程序创建您的晚餐对象,并通过匹配属性名称来填充请求中的数据。

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

+0

感谢您回答并告知链接。 – xport 2010-12-21 07:56:07