zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    C#深入浅出 修饰符(二)
    HDU 5785 Interesting
    HDU 5783 Divide the Sequence
    HDU 5781 ATM Mechine
    UVA 714 Copying Books
    uva 1471 Defense Lines
    UVA 11134 Fabled Rooks
    UVA 11572 Unique Snowflakes
    UVA 11093 Just Finish it up
    UVA 10954 Add All
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2891899.html
Copyright © 2011-2022 走看看