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属性判断是否通过验证,在不同对待。