MVC用于Model验证的四种ModelValidator,那么这些ModelValidator是如何被创建的呢?ASP.NET
目录 一、ModelValidatorProvider 二、DataAnnotationsModelValidator 三、ClientDataTypeModelValidatorProvider 四、DataErrorInfoModelValidatorProvider
由于ValueProvider提供的数据值仅限于简单类型,所以针对复杂类型的Model绑定采用一个递归的过程对作为Model对象的所有属性进行绑定。Model验证可以看成是Model绑定的后续环节,它对绑定的数据实施验证,所以Model验证也是一个递归的过程,它采用基于属性的验证规则对绑定的属性值实施验证。GetValidators方法具有两个参数,类型ModelMetadata的metadata参数用于或者相应的验证规则,而参数context则是表示当前Model绑定上下文的ModelBindingExecutionContext对象。
为了让读者更好地了解DataErrorInfoModelValidator的验证规则,以及定义在DataErrorInfoPropertyModelValidator中针对它的提供机制,我们来演示一个简单的实例。在通过Visual
Studio的ASP.NET MVC项目模板创建的空Web应用中我们定义了如下一个实现了IDataErrorInfo接口的Contact类型。
然后创建了如下一个默认的HomeController类。在Action方法Index中,我们通过DataErrorInfoModelValidatorProvider根据Contact类型极其属性的Model元数据创建了一个ModelValidator列表,然后使用这个列表中的每个具体的ModelValidator对一个Contact对象实施验证,并将ModelValidator的类型和作为验证结果的ModelValidationResult对象的ErrorMessage属性呈现出来。
上面的程序运行之后会在浏览器中呈现出如下所示的输出结果,从中可以看到针对Contact类型的Model元数据创建的是一个DataErrorInfoClassModelValidator,而针对其属性的Model元数据创建的则是一个DataErrorInfoPropertyModelValidator对象。前者对Contact对象本身实施验证,并将Error属性作为验证结果的错误消息;后者针对应的属性实施验证,验证结果的错误消息来源于将属性名称作为索引的值。
<a href="http://www.cnblogs.com/artech/archive/2012/06/01/model-validator-01.html">ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator</a>
<a href="http://www.cnblogs.com/artech/archive/2012/06/02/model-validator-02.html">ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProvider</a>
<a href="http://www.cnblogs.com/artech/archive/2012/06/03/model-validator-03.html">ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProviders</a>
作者:蒋金楠
微信公众账号:大内老A
如果你想及时得到个人撰写文章以及著作的消息推送,或者想看看个人推荐的技术资料,可以扫描左边二维码(或者长按识别二维码)关注个人公众号(原来公众帐号蒋金楠的自媒体将会停用)。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
<a href="http://www.cnblogs.com/artech/archive/2012/06/02/model-validator-02.html" target="_blank">原文链接</a>