zoukankan      html  css  js  c++  java
  • 2016年10月25 草堂随笔1 ModelState.IsValid

    ModelState.IsValid

    当调用ModelState.AddModelError方法时:

    ·调用Controller的ModelState属性

    ·调用Controller的ModelState属性就是调用Controller的ViewData属性的ModelState

    ·其实调用的就是ViewDataDictionary类的ModelState属性

    ·当添加错误信息时,就是调用ModelState属性的AddModelError方法,

    其中ModelState属性是ModelStateDictionary类型

    ·当添加错误信息时,就是向ModelState类实例中Errors属性中添加kv对,也就是对ModelErrorCollection

    添加错误信息

     

    然后再提一下IsValid属性:

    public bool IsValid
    {
        get
        {
            return this.Values.All<ModelState>(delegate (ModelState modelState) 
            {
                return (modelState.Errors.Count == 0);
            });
        }
    }

     

    这下就一目了然了:验证数据后,会在ModelState

     

    当Post提交过来的数据被验证时,当有错误信息时,被添加到ModelState类实例的ModelErrorCollection集合属性中,然后控制器的ModelState属性的Values属性(ModelState类型),如果这个ModelState中的错误的信息的数目为0时,则验证通过,否则验证不通过。

     

    当验证不通过时,不会执行创建动作中的IsValid之后的逻辑,而直接返回视图。这时,错误信息已经添加到了控制器的ViewData中。然后,在视图中显示。

    默认情况下,ASP.NET MVC框架在模型帮顶时执行验证逻辑。
    模型邦定器一旦完成对模型属性的更新,就会利用当前的模型元数据获得模型的所有验证器。这运行时提供了一个验证其(DataAnnotationModelValidator)来与注解一同工作。这个模型验证器会找到所有的验证特性并执行它们包含的验证逻辑。ModelBinder捕获所有失败的验证其规则并把它们放入ModelState中。
     
    模型绑定的主要产物就是ModelState(Controller的属性)。
    这个对象不仅包含了用户所有想放入模型属性里的值,也包括与每一个属性相关联的所有错误,和模型本身的错误,如果存在错误ModelState.IsValid返回false。
     
    ModelState("LastName").Errors[0].ErrorMessage;//查看LastName属性的错误信息
    View中查看:@Html.ValadationMessageFor(m=>m.LastName)
     
    在编辑操作的PostAction中,可以先使用ModelState.IsValid属性判断是否通过验证,在不同对待。
  • 相关阅读:
    报告论文:数字图像噪音处理研究
    报告论文:汽车GPS调度系统车载终端设计技术方案
    疾病研究:我是一名34岁的进行性肌营养不良症患者
    08年最热门七大技术和最紧缺的IT人才
    C#序列化
    网络游戏的数据管理
    2008年3月Google占美国搜索请求量市场份额达67.3%
    C#反转字符串效率最高的方法
    何时应该使用极限编程
    几种字符串反转方法效率比较
  • 原文地址:https://www.cnblogs.com/ruishuang208/p/5995550.html
Copyright © 2011-2022 走看看