ASP.Net MVC3/4中Model验证错误信息的本地化
2013-09-08 10:48
274 查看
最近使用ASP.Net MVC4做一个B/S的管理系统,里面有N多的Action和View Model,View Model上又有N多的验证。
一开始写的时候虽然知道要实现多语言,但是没有过多考虑,本以为继承一下框架自带的RequiredAttribute实现自己的ErrorMessage就可以搞定。近几天实现的时候才发现——坑啊!
如果只是继承自RequiredAttribute,无法实现客户端验证!这对Web站点来说,用户体验不是一般的差。Holy shit,为什么不能仅仅只是继承一下就行了呢!总不能一个一个的设置ErrorMessageName和ErrorMessageType吧!
后来发现,继承的时候可以override IsValid方法,所以说验证逻辑是可以与默认逻辑不同的:即使你的类名叫MyRequiredAttribute并继承自RequiredAttribute,但是在它的IsValid方法中完全可以不检查是否有合法值输入,所以默认客户端验证的JavaScript根本无法应用。(为什么不把内置验证类的IsValid方法设置为sealed呢?)
由于Required、Range之类的验证,错误信息基本上来说应该是统一的模式,比如:XXX不能为空、XXX必填、XXX的范围必须在O和X之间等,在每个Attribute上设置ErrorMessageName和ErrorMessageType简直是灾难!
作为一名靠谱的程序员,我们要在这种事情上“偷懒”。
经放狗发现有个IClientValidatable接口是实现客户端验证的,这个接口貌似是从MVC 3开始才引入的。
然后根据这篇Blog的指导,自己写出了LocalizedRequired和LocalizedRange。客户端验证直接使用jquery validator和unobtrusive默认的验证逻辑。
同样,给出代码,环境:VS2010 SP1+ASP.Net MVC4,点此下载代码
一开始写的时候虽然知道要实现多语言,但是没有过多考虑,本以为继承一下框架自带的RequiredAttribute实现自己的ErrorMessage就可以搞定。近几天实现的时候才发现——坑啊!
如果只是继承自RequiredAttribute,无法实现客户端验证!这对Web站点来说,用户体验不是一般的差。Holy shit,为什么不能仅仅只是继承一下就行了呢!总不能一个一个的设置ErrorMessageName和ErrorMessageType吧!
后来发现,继承的时候可以override IsValid方法,所以说验证逻辑是可以与默认逻辑不同的:即使你的类名叫MyRequiredAttribute并继承自RequiredAttribute,但是在它的IsValid方法中完全可以不检查是否有合法值输入,所以默认客户端验证的JavaScript根本无法应用。(为什么不把内置验证类的IsValid方法设置为sealed呢?)
由于Required、Range之类的验证,错误信息基本上来说应该是统一的模式,比如:XXX不能为空、XXX必填、XXX的范围必须在O和X之间等,在每个Attribute上设置ErrorMessageName和ErrorMessageType简直是灾难!
作为一名靠谱的程序员,我们要在这种事情上“偷懒”。
经放狗发现有个IClientValidatable接口是实现客户端验证的,这个接口貌似是从MVC 3开始才引入的。
然后根据这篇Blog的指导,自己写出了LocalizedRequired和LocalizedRange。客户端验证直接使用jquery validator和unobtrusive默认的验证逻辑。
同样,给出代码,环境:VS2010 SP1+ASP.Net MVC4,点此下载代码
相关文章推荐
- asp.net MVC 验证错误信息本地化
- asp.net MVC 验证错误信息本地化
- 获取Action的ModelState中所有验证信息的方式(Asp.net MVC)
- ASP.NET MVC 错误提示信息本地化
- ASP.NET MVC 错误提示信息本地化
- ASP.NET MVC控制器里捕获视图的错误验证信息(ErrorMessage)
- ASP.NET MVC异步验证是如何工作的01,jQuery的验证方式、错误信息提示、validate方法的背后
- ASP.NET MVC基于标注特性的Model验证:ValidationAttribute
- ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator
- ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidatorProvider
- ASP.NET MVC Model验证(一)
- ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
- asp.net mvc Model验证总结及常用正则表达式
- ASP.NET MVC ModelState与数据验证【转】
- Asp.net MVC中 model 验证方式 ajax +jquery
- ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProviders
- ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
- 一起谈.NET技术,ASP.NET MVC 2 验证消息本地化策略扩展
- 【ASP.NET MVC 学习笔记】- 17 Model验证
- [ASP.NET MVC 小牛之路]16 - Model 验证