在Professional ASP.NET MVC 1.0的NerdDinner示例中,有一种方法可以创建一个新的晚餐,复制如下(免费的 NerdDinner 版本的第 89 页)。
它在那里检查 ModelState.IsValid 是否为真。它似乎检查模型是否对数据库有效(也就是说,它捕获数据类型转换,例如格式无效的日期,但不是业务规则)。真的吗?
提交表单时,如果您在日期中有错误,ModelState.IsValid 将为 false,您将返回错误,但仅针对该日期,因为从未执行过 AddRuleViolations。如果您完全删除对 ModelState.IsValid 的检查,那么您将收到所有错误(由于异常),包括无效日期中的标记。那么,为什么要检查 ModelState.IsValid 呢?我错过了什么吗?
//
// POST: /Dinners/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Dinner dinner) {
if (ModelState.IsValid) {
try {
dinner.HostedBy = "SomeUser";
dinnerRepository.Add(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new {id = dinner.DinnerID });
} catch {
ModelState.AddRuleViolations(dinner.GetRuleViolations());
}
}
return View(dinner);
}