最佳答案
在 书呆子晚餐的例子 专业 ASP.NET MVC 1.0有一个方法来创建一个新的晚餐复制下面(第89页的免费书呆子晚餐版本)。
在那里它检查 ModelState. IsValid 为 true。它似乎检查模型是否对数据库有效(也就是说,它捕获数据类型转换,比如格式无效的日期,但不捕获业务规则)。是真的吗?
在提交表单时,如果在日期中出现错误,ModelState.IsValid 将为 false,并且您将返回一个错误,但是这个错误只针对日期,因为从未执行过 AddRule 。如果您完全删除了 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);
}