好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

asp.net MVC 验证错误信息本地化

asp.net MVC 验证错误信息本地化

asp.net MVC 提供了模型验证的快捷方式,我在上一篇博客中有专门提到模型验证的类型以及如何自定义验证,这次我们来探讨一下模型验证信息如何本地化,活着直白点说如何在不同语言中显示不同的错误信息。

咱们先来说一下,不采用资源文件,我们如何处理错误信息的。

首先我们定义UserModel 领域模型类

 1       public   class   UserModel
  2       {
  3          [Required(ErrorMessage= "  用户名不能为空  "  )]
  4           public   string  UserName {  get ;  set  ; }
  5  
 6          [Required(ErrorMessage= "  密码不能为空  "  )]
  7           [DataType(DataType.Password)]
  8           public   string  Password {  get ;  set  ; }
  9      }

领域模型类很简单,就是定义了两个属性,用户名和密码,然后验证他们是必填项。

我们在View层,采用简单的方式来显示这个领域模型,因为不涉及到具体的逻辑,所以我们一切从简。

  1   @{
   2      Layout =  "  ~/views/shared/_layout.cshtml  "  ;
   3   }
   4   @model MvcWeb.Models.UserModel
   5  <!DOCTYPE html>
  6  <html>
  7  <head>
  8      <title>Index</title>
  9      <script src= "  @Url.Content(  " ~/Scripts/jquery- 1.5 . 1 .min.js "  )  "  type= "  text/javascript  " ></script>
 10      <script src= "  @Url.Content(  " ~/Scripts/jquery.validate.min.js "  )  "  type= "  text/javascript  " ></script>
 11      <script src= "  @Url.Content(  " ~/Scripts/jquery.validate.unobtrusive.min.js "  )  "  type= "  text/javascript  " ></script>
 12  </head>
 13  <body>
 14       @using (Html.BeginForm())
  15       {
  16           @Html.EditorForModel()
  17          <input type= "  submit  "  value= "  提交  "  />
 18       }
  19  </body>
 20  </html>

这些是初学者都很熟悉的一些操作,当然我们今天的重点不是这个,是通过资源文件来动态的显示不同区域的错误信息。下面我们来看一下错误信息显示。

从上面的错误信息显示中,我们可以看出,错误信息是可以正确显示,但是也有一些问题,比如说错误信息是硬编码的,不能动态的更改,也不能适应不同区域显示。下面我们通过资源文件来更改错误信息的显示,虽然说这个功能点如果知道了会很简单,但是确实如果自己摸索的话,还真是要费一点功夫的,我也是看了好几个小时也才慢慢熟悉。

下面我们来新建一个资源文件,首先我们添加一个目录 叫做Resources,在里面添加一个资源文件,Resource1.resx,请注意:我们不能添加了resource.en-us.resx 和resource.zh-cn.resx 两个资源文件,而没有resource.resx文件,这样的话 在代码中是看不到resource这个资源类的,所以请注意一下。添加了resource1.resx 和resource1.en-us.resx 两个资源文件,并且添加一个Name key 和用户名不能为空以及User Name required,这两个值是在两个文件中的。

现在我们在Model中更改错误信息的显示。

 1     public   class   UserModel
  2       {
  3          [Required(ErrorMessageResourceName =  "  Name  " , ErrorMessageResourceType =  typeof  (Resources.Resource1))]
  4           public   string  UserName {  get ;  set  ; }
  5  
 6          [Required(ErrorMessage =  "  密码不能为空  "  )]
  7           [DataType(DataType.Password)]
  8           public   string  Password {  get ;  set  ; }
  9      }

请注意ErrorMessageResourceName 表示的是资源文件中的key,而后面的type就是表示的资源类。

前台代码不变,我们调试一下,查看结果。

这是在中文环境中的显示结果,我们可以通过浏览器的语言选项,来更改默认的区域,但是可能我的ie版本是10.0,更改了语言选项,没有看到更改为英文,所以我直接在前台更改线程的区域。

  1   @{
   2      Layout =  "  ~/views/shared/_layout.cshtml  "  ;
   3   }
   4   @model MvcWeb.Models.UserModel
   5  <!DOCTYPE html>
  6  <html>
  7  <head>
  8      <title>Index</title>
  9      <script src= "  @Url.Content(  " ~/Scripts/jquery- 1.5 . 1 .min.js "  )  "  type= "  text/javascript  " ></script>
 10      <script src= "  @Url.Content(  " ~/Scripts/jquery.validate.min.js "  )  "  type= "  text/javascript  " ></script>
 11      <script src= "  @Url.Content(  " ~/Scripts/jquery.validate.unobtrusive.min.js "  )  "  type= "  text/javascript  " ></script>
 12  </head>
 13  <body>
 14   @{
  15       Html.EnableClientValidation();
  16      System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture( "  en-US  "  );
  17  
 18      System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture( "  en-us  "  );
  19       }
  20       @using (Html.BeginForm())
  21       {
  22           @Html.EditorForModel()
  23          <input type= "  submit  "  value= "  提交  "  />
 24       }
  25  </body>
 26  </html>

注意我更改了线程的Culture,现在我们再来查看一下效果。有图有真相

语言显示了英文。这个功能点本身没有什么特别的,我在这里提出来只是为了说明在MVC中如何使用资源文件实现多语言。这是过年前的博客,肯定不是最后一篇,最近公司要用到wcf,以前都是用web 服务,现在用wcf,一切都是初学者,幸好我功底深厚,学习起来还算比较顺利。有机会和大家分享一下咱学习wcf的过程。

 http://www.cnblogs.com/jiagoushi/archive/2013/02/03/2890906.html

每天进步一点,一年就会进步一大步,十年就可以成功,君子当自强不息,君子当好好学习,每天进步

 

分类:  Asp.Net MVC 3

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于asp.net MVC 验证错误信息本地化的详细内容...

  阅读:44次