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的過程。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM