Spiga

MVC3中使用验证适配器修改默认的验证提示信息

2011-05-29 14:36 by 无常, 1486 visits, 收藏, 编辑

验证

MVC中提供的模块验证非常灵活,在System.ComponentModel.DataAnnotations命名空间中提供了常用的一些验证特性,如Required、Compare等。 所有的验证特性都提供有ErrorMessage属性给我们设置自定义的出错提示信息,比如我们可以这样指定必填属性的提示:[Required(ErrorMessage ="请输入用户名")]。 还可以通过设置ErrorMessageResourceType和 ErrorMessageResourceName属性来使用系统资源文件实现多语言支持(参考:http://haacked.com/archive/2009/12/12/localizing-aspnetmvc-validation.aspx)。

问题

项目中遇到问题,程序员为了省事验证属性都最简化,比如必填字段只指定了[Required]特性,这样就导致了验证错误提示信息不太直观,比如会这样:

image  image

客户比较挑剔,特别指定要消除鸡肠文。按照上文提到的方法,可以给Required.Errormessage指定详细的验证信息,但项目中的实体类较多,一一去修改的话工作量比较大。
于是寻找捷径…

验证适配器

DataAnnotationsModelValidatorProvider提供有RegisterAdapter和RegisterAdapterFactory二个方法供我们注册自己的验证适配器或适配器工厂类。首先创建一个自己的适配器MyRequiredAttributeAdapter:

image

从MVC内置的System.Web.Mvc.RequiredAttributeAdapter适配器类继承(RequiredAttributeAdapter的基类y就是DataAnnotationsModelValidator<RequiredAttribute>),覆盖GetClientValidationRules方法,在这里使用自定义的提示文字创建验证规则类。

然后在程序启动时注册此适配器:

image

编译后再打开页面,提示信息已经全部改变了。
image

省去了一个一个修改的麻烦。

标签: Asp.net MVC
Add your comment

8 条回复

  1. #1楼 Jamie的世界      2011-05-29 14:40
    灰常好,顶老师!
     回复 引用 查看   
  2. #2楼 鹤冲天      2011-05-29 15:00
    没必要,装个 .net framework 的中文包就能自动显示中文提示了。
     回复 引用 查看   
  3. #3楼 超级奶崽      2011-05-29 16:50
    直接使用Required(ErrorMessage="")特性即可
     回复 引用 查看   
  4. #4楼[楼主] 无常      2011-05-29 17:19
    引用超级奶崽:直接使用Required(ErrorMessage="")特性即可

    要支持多语言的话,这个方法就不好处理了。
     回复 引用 查看   
  5. #5楼 testzhangsan      2011-05-29 18:44
    不错,改天试试!
     回复 引用 查看   
  6. #6楼 builderman      2011-06-01 18:09
    解决了我的一个大难题,表示感谢
     回复 引用 查看   
  7. #7楼 builderman      2011-06-01 18:10
    我用的MVC2
     回复 引用 查看   
  8. #8楼 NTXX      2012-02-22 16:51
    在area下能正常使用么?我好像不能正常使用,应该怎么处理?
     回复 引用 查看   
Locations of visitors to this page