关于NerdDinner Professional ASP.NET MVC 1.0 的示例有一种创建新晚餐的方法,如下所示(免费 NerdDinner 版本的第 89 页)。
它检查 ModelState.IsValid 是否为 true。它似乎检查模型对于数据库是否有效(也就是说,它捕获数据类型转换,例如格式无效的日期,但不捕获业务规则)。这是真的吗?
提交表单时,如果日期有误,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);
}
最佳答案
ModelState.IsValid
告诉您是否有任何模型错误已添加到 ModelState
。
默认模型绑定(bind)器将为基本类型转换问题添加一些错误(例如,为“int”传递非数字)。您可以根据您使用的任何验证系统更全面地填充 ModelState。
示例 DataAnnotations
模型绑定(bind)器将使用从模型上的 DataAnnotations
属性获取的验证错误来填充模型状态。
关于asp.net-mvc - ModelState.IsValid 在 NerdDinner 的 ASP.NET MVC 中有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/881281/