为了账号安全,请及时绑定邮箱和手机立即绑定

什么是在NerdDinner中的ASP.NET MVC中有效的ModelState.IsValid?

什么是在NerdDinner中的ASP.NET MVC中有效的ModelState.IsValid?

慕工程0101907 2019-09-02 09:09:27
在Professional ASP.NET MVC 1.0的NerdDinner示例中,有一种方法可以创建一个新的晚餐,如下所示(免费的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); } 
查看完整描述

3 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

ModelState.IsValid告诉您是否添加了任何模型错误ModelState

默认模型绑定器将为基本类型转换问题添加一些错误(例如,为非“数字”传递非数字)。您可以根据您使用的任何验证系统更完整地填充ModelState。

样本DataAnnotations模型绑定器将填充模型状态,并从DataAnnotations模型中的属性获取验证错误。


查看完整回答
反对 回复 2019-09-02
?
郎朗坤

TA贡献1921条经验 获得超9个赞

是的,Jared和Kelly Orr是对的。我在编辑异常中使用以下代码。


foreach (var issue in dinner.GetRuleViolations())

{

    ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);

}

代替


ModelState.AddRuleViolations(dinner.GetRuleViolations());


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 425 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信