• 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属性判断是否通过验证,在不同对待。
  • 相关阅读:
    View Focus的处理过程及ViewGroup的mFocused字段分析
    Android按键事件处理流程 -- KeyEvent
    Android中将xml布局文件转化为View树的过程分析(下)-- LayoutInflater源码分析
    Android中将xml布局文件转化为View树的过程分析(上)
    IntentService源码分析
    Android源码分析之SharedPreferences
    进程间传递文件描述符
    Epoll在LT和ET模式下的读写方式
    gdb
    Android开发之漫漫长途 Fragment番外篇——TabLayout+ViewPager+Fragment
  • 原文地址:https://www.cnblogs.com/ruishuang208/p/5995550.html
Copyright © 2020-2023  润新知