什么是ModelState.IsValid在NerdDinner中的ASP.NET MVC有效?
在专业ASP.NET MVC 1.0的NerdDinner示例中,有一种方法可以创build一个新的晚餐(复制NerdDinner版本的第89页)。
在那里它检查ModelState.IsValid为true。 它似乎检查模型是否对数据库有效(即捕获数据types转换,如具有无效格式的date,而不是业务规则)。 真的吗?
提交表单时,如果date中有错误,ModelState.IsValid将为false,您将返回一个错误,但仅限于该date,因为AddRuleViolations从未执行过。 如果您完全删除了ModelState.IsValid的检查,那么您将得到所有的错误(由于例外),包括在无效date的标记。 那么,为什么检查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
。
默认的模型联编程序会为基本的types转换问题添加一些错误(例如,传递一个非int数的非数字)。 您可以根据您使用的任何validation系统更完整地填充ModelState。
示例DataAnnotations
模型绑定器将填充模型状态,其中包含从模型上的DataAnnotations
属性中获取的validation错误。
从Errata: ModelState.AddRuleViolations(dinner.GetRuleViolations());
应该:
ModelState.AddModelErrors(dinner.GetRuleViolations());
参考: http : //www.wrox.com/WileyCDA/WroxTitle/Professional-ASP-NET-MVC-1-0.productCd-0470384611,descCd-ERRATA.html
- 如何使用PHP检查电子邮件地址是真实还是有效的
- 如何从我的eclipse项目中删除javascriptvalidation?
- “+ var === + var”如何在内部工作以validationvar是否为数字?
- 使用Fluentvalidation进行条件validation
- 在angularjs中显示validation错误消息
- DataAnnotations:recursionvalidation整个对象图
- 如何在jQuery.validation中添加不等于规则
- 第一个和最后一个名字的正则expression式
- 如何更改/自定义密码字段名称为Laravel 4和Laravel 5用户身份validation