asp.net-mvc - ModelState.IsValid 在 NerdDinner 的 ASP.NET MVC 中有效吗?

标签 asp.net-mvc validation nerddinner

关于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/

相关文章:

javascript - 获取上传进度时 XMLHttpRequest 的替代方案

javascript - 功能未运行。控制台日志中没有错误

asp.net - 有没有办法禁用整个页面的事件验证?

asp.net-mvc - 我如何在我的 ASP.NET MVC 规则违规中获得数据库验证?

nerddinner - 无法在 vs2008 中打开 NerdDinner 项目

c# - 使用 Azure 搜索服务拉近距离

c# - 如何仅使用一个 Controller 动态检索表?

c# - asp.net mvc 4,线程被模型绑定(bind)改变了吗?

java - java注解可以被覆盖吗?如果是这样?如何?