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