首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在NerdDinner的ASP.NET MVC中,ModelState.IsValid对什么是有效的?

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

Stack Overflow用户
提问于 2009-05-19 06:42:44
回答 4查看 306.7K关注 0票数 149

Professional ASP.NET MVC 1.0NerdDinner示例中,有一个方法可以创建一个新的晚餐,如下所示(免费NerdDinner版本的第89页)。

在那里,它检查ModelState.IsValid是否为真。它似乎检查模型对于数据库是否有效(即,它捕获数据类型转换,如格式无效的日期,但不是业务规则)。这是真的吗?

提交表单时,如果日期中有错误,ModelState.IsValid将为false,您将返回一个错误,但仅限于该日期,因为AddRuleViolations从未执行过。如果您完全取消对ModelState.IsValid的检查,那么您将得到所有错误(由于异常),包括在无效日期中的标记。那么,为什么ModelState.IsValid的支票在那里呢?我是不是遗漏了什么?

代码语言:javascript
复制
// 
// 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); 
} 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-19 07:07:39

ModelState.IsValid会告诉您是否已将任何模型错误添加到ModelState中。

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

示例DataAnnotations模型绑定器将使用从模型的DataAnnotations属性中获取的验证错误来填充模型状态。

票数 152
EN

Stack Overflow用户

发布于 2009-07-14 02:20:19

来自勘误表: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

票数 26
EN

Stack Overflow用户

发布于 2020-02-23 03:38:26

所有有明确类型的模型字段,需要在返回给Controller时进行验证。如果有任何模型字段与其定义的类型不匹配,则ModelState.IsValid将返回false。因为,这些错误将被添加到ModelState中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/881281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档