NerdDinnerProfessional 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中。

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

样本DataAnnotations模型绑定(bind)器将使用从模型上的DataAnnotations属性获取的验证错误填充模型状态。

09-10 14:08
查看更多