在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);
}
更推荐哪一种用于生产?
答案 0 :(得分:5)
如果所有必需的数据都在Request.Form,路由数据或URL查询字符串中,那么您可以像第二个示例中那样使用模型绑定。
模型绑定器创建您的晚餐对象,并通过匹配属性名称使用请求中的数据填充它。
您可以使用“白名单”,“黑名单”,前缀和标记界面自定义绑定过程。 只需确保您不会无意中绑定值 - 请参阅此link。