没有合适的资源?快使用搜索试试~ 我知道了~
在《ASP.NET MVC的四种验证编程方式》一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”、“标注ValidationAttribute特性”、“让数据类型实现IValidatableObject或者IDataErrorInfo”),那么在ASP.NET MVC框架内部是如何提供针对这四种不同编程方式的支持的呢?接下来我们就来聊聊这背后的故事。 一、ModelValidator与ModelValidatorProvider 虽然Model绑定的方式因被验证数据类型的差异而有所不同,但是ASP.NET MVC总是使用一个名为ModelValidator的对象
资源详情
资源评论
资源推荐
ASP.NET MVC下的四种验证编程方式下的四种验证编程方式[续篇续篇]
在《ASP.NET MVC的四种验证编程方式》一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验
证”、“标注ValidationAttribute特性”、“让数据类型实现IValidatableObject或者IDataErrorInfo”),那么在ASP.NET MVC框架内
部是如何提供针对这四种不同编程方式的支持的呢?接下来我们就来聊聊这背后的故事。
一、一、ModelValidator与与ModelValidatorProvider
虽然Model绑定的方式因被验证数据类型的差异而有所不同,但是ASP.NET MVC总是使用一个名为ModelValidator的对象来
对绑定的数据对象实施验证。所有的ModelValidator类型均继承自具有如下定义的抽象类ModelValidator。它的
GetClientValidationRules方法返回一个元素类型为ModelClientValidationRule的集合,而ModelClientValidationRule是对客户
端验证规则的封装,我们会在客户端验证部分对其进行详细介绍。
public abstract class ModelValidator
{
//其他成员
public virtual IEnumerable<ModelClientValidationRule> GetClientValidationRules();
public abstract IEnumerable<ModelValidationResult> Validate(object container);
public virtual bool IsRequired { get; }
}
针对目标数据的验证是通过调用Validate方法来完成的,该方法的输入参数container表示的正是被验证的对象。正是因为被验
证的总是一个复杂类型的对象,后者又被称为一个具有若干数据成员的“容器”对象,所以对应的参数被命名为container。
Validate方法表示验证结果的返回值并不是一个简单的布尔值,而是一个元素类型为具有如下定义的ModelValidationResult对
象集合。
public class ModelValidationResult
{
public string MemberName { get; set; }
public string Message { get; set; }
}
ModelValidationResult具有两个字符串类型属性MemberName和Message,前者代表被验证数据成员的名称,后者表示错误
消息。一般来说,如果ModelValidationResult对象来源于针对容器对象本身的验证,它的MemberName属性为空字符串。对
于针对容器对象某个属性的验证来说,属性名称会作为返回的ModelValidationResult对象的MemberName属性。
ModelValidationResult集合只有在验证失败的情况下才会返回。如果被验证数据对象符合所有的验证规则,Validate方法会直
接返回Null或者一个空ModelValidationResult集合。值得一提的是,我们有时候会用ValidationResult的静态只读字段Success
表示成功通过验证的结果,实际上该字段的值就是Null。
public class ValidationResult
{
//其他成员
public static readonly ValidationResult Success;
}
ModelValidator具有一个布尔类型的只读属性IsRequired表示该ModelValidator是否对目标数据进行“必需性”验证(即被验证的
数据成员必须具有一个具体的值),该属性默认返回False。我们可以通过应用RequiredAttribute特性将某个属性定义成“必
需”的数据成员。
我们知道ASP.NET MVC大都采用Provider的模式来提供相应的组件,比如描述Model元数据的ModelMetadata通过对应的
ModelMetadataProvider来提供,实现Model绑定的ModelBinder则可以通过对应的ModelBinderProvider来提供,用于实现
Model验证的ModelValidator也不例外,它对应的提供者为ModelValidatorProvider,对应的类型继承自具有如下定义的抽象类
ModelValidator Provider。
public abstract class ModelValidatorProvider
{
public abstract IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context);
}
如上面的代码片段所示,GetValidators方法具有两个参数,一个是用于描述被验证类型或者属性Model元数据的
ModelMetadata对象,另一个是当前ControllerContext。该方法返回的是一个元素类型为ModelValidator的集合。
ASP.NET MVC 通过静态类型ModelValidatorProviders对使用的ModelValidatorProvider进行注册。如下面的代码片段所
示,ModelValidatorProviders具有一个静态只读属性Providers,对应的类型为ModelValidatorProviderCollection,它表示基于
整个Web应用范围的全局ModelValidatorProvider集合。
public static class ModelValidatorProviders
weixin_38747211
- 粉丝: 12
- 资源: 901
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 111111111111111111
- Screenshot_2024-04-30-21-47-24-26.jpg
- Cpp1.cpp1111111111
- 利用ERP流程操作的整个订单流程.ppt
- 最新二开版本源码博客论坛源码,UI很漂亮,可切换皮肤界面.rar
- ModStartBlog现代化个人博客系统 v5.2.0源码.rar
- 带posix库的mingw编译器
- SoraAI是一款功能强大的AI助手,由OpenAI开发,以其出色的语音识别技术、广泛的知识库和高度的人工智能特性而备受瞩目
- Thinkphp开发大气响应式个人博客青春博客网站源码.rar
- 最新PHP博客网站程序源码 ThinkPHP.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0