2010-03-17 54 views
6

我目前正試圖找出如何本地化由MVC生成的錯誤消息。讓我使用默認模型聯編程序作爲示例,以便我可以解釋問題。默認模型綁定器的MVC本地化

假設我有一個表單,用戶輸入他們的年齡。用戶然後輸入「十」的形式,而不是得到預期的錯誤

「年齡必須介於18和25之間」。

消息

「值 '十' 是無效的年齡。」

被顯示。

實體的年齡屬性定義如下:

[Range(18, 25, ErrorMessageResourceType = typeof (Errors), 
     ErrorMessageResourceName = "Age", ErrorMessage = "Range_ErrorMessage")]  
    public int Age { get; set; } 

一些挖後,我發現這個錯誤文本來自System.Web.Mvc.Resources.DefaultModelBinder_ValueInvalidMvcResources.resx文件。

現在,如何創建本文件的本地化版本?

作爲一種解決方案,例如,我應該下載MVC來源並添加MvcResources.en_GB.resxMvcResources.fr_FR.resxMvcResources.es_ES.resxMvcResources.de_DE.resx,然後編譯我自己的MVC.dll版本?

但我不喜歡這個想法。任何人都知道更好的方法?

+0

有關這方面的一個很好的博客也在這裏:http://bradwilson.typepad.com/blog/2010/01/input- validation-vs-model-validation-in-aspnet-mvc.html – 2010-03-22 09:29:05

回答

5

http://forums.asp.net/p/1512140/3608427.aspx,向下滾動到Brad Wilson的回覆接近該頁面的底部(星期六,一月09 2010,3:20 PM)。 DefaultModelBinder上有靜態屬性,您可以設置該屬性來定位通用錯誤消息。

一般錯誤消息是用來代替你的[範圍]消息的原因是,[範圍]提供了一種驗證錯誤消息,但該特定情況下是一個結合錯誤。框架絕對沒有辦法希望將字符串「ten」轉換爲Int32,所以它甚至不能激發[Range]驗證器。這就是該論壇中提到的「PropertyValueInvalid」鍵所控制的內容。

+0

謝謝,多數民衆贊成我正在尋找。 – 2010-03-18 14:35:13

+0

像「PropertyValueInvalid」這樣的密鑰是否正式記錄在某處? – Johnny5 2011-08-31 16:03:14

0
+0

對於驗證,我使用Fluent驗證。 這裏的問題不是驗證,我想?問題是MVC,或者在這種情況下,默認的模型聯編程序在向ModelState.Error字典添加自己的錯誤消息時未本地化錯誤消息。我想要使​​用與默認模型聯編程序提供的完全相同的行爲,但是我想將這些錯誤消息本地化爲其他語言 – 2010-03-17 14:16:47

3

在MVC3執行以下操作來更改缺省消息:

  1. 添加App_GlobalResources文件夾到你的ASP.NET網站
  2. 添加新資源文件,稱它爲f.ex.爲MyResources。RESX
  3. 添加這些鍵
    • PropertyValueRequired:需要的值。
    • PropertyValueInvalid:值「{0}」對{1}無效。
  4. 中的global.asax.cs的的Application_Start
  5. 添加一行DefaultModelBinder.ResourceClassKey = "MyResources";