ASP.NET MVC下的四种验证编程方式[续篇]【转】
2015-07-10 17:14
741 查看
在《ASP.NET MVC下的四种验证编程方式》 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”、“标注ValidationAttribute特性”、“让数据类型实现 IValidatableObject或者IDataErrorInfo”),那么在ASP.NET MVC框架内部是如何提供针对这四种不同编程方式的支持的呢?接下来我们就来聊聊这背后的故事。
[/code]
如右图所示的UML列出了组成Model验证系统的三个核心类型。具体的Model验证工作总是通过某个具体的ModelValidator来完成,作为 ModelValidator提供者的ModelValidatorProvider注册在静态类型ModelValidatorProviders之 上。
对于上面提到的这三种验证编程方式,第一种(利用应用在数据类型或其数据成员上的ValidationAttribute特性来定义相应的验证规 则)是最为常用的。基于ValidationAttribute特性这种声明式验证解决方案最终通过 DataAnnotationsModelValidator来完成。一个DataAnnotationsModelValidator对象实际上是对一 个ValidationAttribute特性的封装,这可以从如下所示的定义看出来。
[/code]
一、ModelValidator与ModelValidatorProvider
虽 然Model绑定的方式因被验证数据类型的差异而有所不同,但是ASP.NET MVC总是使用一个名为ModelValidator的对象来对绑定的数据对象实施验证。所有的ModelValidator类型均继承自具有如下定义的 抽象类ModelValidator。它的GetClientValidationRules方法返回一个元素类型为 ModelClientValidationRule的集合,而ModelClientValidationRule是对客户端验证规则的封装,我们会在 客户端验证部分对其进行详细介绍。1: public abstract class ModelValidator [code]
object container);
[/code]
如右图所示的UML列出了组成Model验证系统的三个核心类型。具体的Model验证工作总是通过某个具体的ModelValidator来完成,作为 ModelValidator提供者的ModelValidatorProvider注册在静态类型ModelValidatorProviders之 上。
二、DataAnnotationsModelValidator
我们在《ASP.NET MVC下的四种验证编程方式》 中介绍了三种不同的“自动化验证”的编程方式,ASP.NET MVC在内部会采用不同的ModelValidator来对绑定的参数实施验证。一个具体的ModelValidator通常有相应的 ModelValidatorProvider来提供,接下来的内容中将对ASP.NET MVC提供的原生的ModelValidator和对应的ModelValidatorProvider作详细的介绍。对于上面提到的这三种验证编程方式,第一种(利用应用在数据类型或其数据成员上的ValidationAttribute特性来定义相应的验证规 则)是最为常用的。基于ValidationAttribute特性这种声明式验证解决方案最终通过 DataAnnotationsModelValidator来完成。一个DataAnnotationsModelValidator对象实际上是对一 个ValidationAttribute特性的封装,这可以从如下所示的定义看出来。
1: public class DataAnnotationsModelValidator : ModelValidator [code]
object container);
object container);
object container);
object container);
上一篇 ASP.NET MVC下的四种验证编程方式 原文:http://www.cnblogs.com/artech/p/asp-net-mvc-4-validation.html
[/code]
相关文章推荐
- ASP.NET MVC下的四种验证编程方式【转】
- asp.net 显示等待提示,完成后隐藏消失
- Windows Server 2012/win8 iis8 上安装 asp.net 4.5 当时用了mvc5 .net framework 4.5 所以得装下
- ASP.NET MVC Model验证总结【转】
- 给asp.net刚学的人的一点经验(一)
- 给asp.net刚学的人的一点经验(一)
- WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效
- WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
- asp.net 去重复验证
- 【Metasploit魔鬼训练营--实践笔记】4.2.3 SQL 注入漏洞探测
- ASP.NET性能优化之减少请求
- asp.net 接入微信公众平台,回复消息,解决乱码问题
- WCF技术剖析之二:再谈IIS与ASP.NET管道
- WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构
- ASP.NET控件组(lable1、label2、label3.....labeln)的赋值
- asp.net实现三层架构的例子
- 介绍“Razor”— ASP.NET的一个新视图引擎
- [每日刷题(2015/7/10)]简述ASP.NET的页面运行机制
- ASP.NET操作Word的IIS权限配置
- ASP.NET简单实现注销功能