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

 2023-02-17    365  

问题描述

在 nerddinner 示例 professional asp.net mvc 1.0 有一种方法创建一份新的晚餐,如复制的BOLL(免费NERDDINNER版本的第89页).

它会检查模型符号.为true.它似乎检查模型是否对数据库有效(即,它捕获数据类型转换,例如具有无效格式的日期,但不是业务规则).是真的吗?

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

在提交表单时,如果日期有错误,则ModelState.Isvalid将是假的,并且您将收回错误,但仅在日期中返回错误,因为从未执行addrulevionations.如果完全删除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模型粘合剂将填充模型状态,验证误差从模型上的DataAnnotations属性取出.

其他推荐答案

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

其他推荐答案

所有具有明确类型的模型字段,应在返回控制器时验证.如果任何模型字段与定义类型不匹配,则ModelState.Isvalid将返回false.因为,这些错误将在ModelState中添加.

以上所述是小编给大家介绍的在ASP.NET MVC中,ModelState.IsValid在NerdDinner中的有效性是什么?,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/34232.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。