ASP.Net MVC3/4中Model验证错误信息的本地化
最近使用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,点此下载代码
最新文章
- 谢欣伦 - OpenDev原创例程 - 网络摄像机WebCamera
- mysql sql_safe_updates 不支持子查询的更新。
- svn update错误
- 031. aps.net中数据绑定控件两种添加自动编号的方法
- Asp.NET MVC 拍卖网站,拆解【2】 Asp.NET MVC章回,第(1)节
- 笔记:修改centos的IP地址相关配置
- Asp.Net mvc筛选器中返回信息中断操作
- vector之妙用系列
- Team Foundation Server 基本功能
- WeQuant交易策略—ATR
- javaRMI详解
- redis 慢日志查询
- 将一幅图像取平均值缩小N倍实现方法
- python基础数据类型--dict 字典
- [SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)
- cacti系列(三)之cacti添加对mysql服务器主从的监控
- POJ2274 Long Long Message 字符串
- [Spring]初识Spring-Spring的基础使用-如何通过Bean来实例化?
- 构建之法-软件测试+质量保障+稳定和发布阶段+IT行业的创新+人、绩效和职业道德
- Ioc:autofac lifetime scope.
热门文章
- 解决phpStudy启动网站警告问题
- BZOJ 2212 [Poi2011]Tree Rotations(线段树合并)
- BZOJ 3282 Tree(动态树)
- 【推导】【找规律】【二分】hdu6154 CaoHaha's staff
- 抽象类(abstract class)和接口(interface)的异同
- css排版之-标准文档流
- concat函数,concat_ws函数,group_concat函数,repeat()函数
- LOG收集系统(一):原日志至收集
- Eclipse运行Maven的SpringMVC项目Run on Server时出现错误:Error configuring application listener of class org.springframework.web.context.ContextLoaderListener的问题解决
- 高并发环境下,Redisson实现redis分布式锁