4

我正在使用System.ComponeneModel.DataAnnotations屬性,如Required和StringLength。是否有可能本地化其全球錯誤信息?全局本地化驗證

我知道我能做到這一點

[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))] 

但這樣做,我到處都用所需的屬性是隻是瘋狂。此外,我想避免這樣的東西:

public class LocalizedRequiredAttribute : RequiredAttribute { 
    public LocalizedRequiredAttribute() 
     : base() { 
     ErrorMessageResourceName = "Required"; 
     ErrorMessageResourceType = typeof(Resources.Validation); 
    } 
} 

(但如果沒有任何其他的方式,我會滿足於這一點)

+0

用相同的接受的答案類似的問題http://stackoverflow.com/questions/2480557/providing-localized-error-messages-for-non-attributed-model-validation-in-asp- ne – 2012-07-05 21:55:19

回答

8

據我所知,你需要或者自定義屬性或指定ErrorMessageResourceName和ErrorMessageResourceType屬性。還有另一種可能性detailed here

創建 App_GlobalResources文件一個全球性的資源類,並設置 DefaultModelBinder.ResourceClassKey到 這個類的名稱(例如, 如果您做了「Messages.resx」,然後設置將ResourceClassKey設置爲「Messages」( ))。

有兩個字符串就可以在MVC 2覆蓋 :

  • 爲 「PropertyValueInvalid」的字符串值時使用 數據輸入的用戶不 與數據類型兼容(例如,輸入 整數字段的「abc」)。對此的默認消息 是:「值」{0}「不是對{1}有效的 。」

  • 用戶沒有輸入用於 字段,它是不可爲空的任何數據時 「PropertyValueRequired」字符串值使用( 例如,整數字段)。默認消息爲 :「值 是必需的。」

重要的是要注意 如果您有 的 DataAnnotationsModelValidatorProvider 在驗證供應商名單 (這是默認設置)認爲,第二種情況是很重要的,那麼你 將永遠不會看到第二個消息。 該供應商認爲非可選字段 ,並增加了一個隱含的[必需] 屬性給他們,讓他們 的消息將帶有明確的[必需] 屬性等 領域保持一致,並確保您獲得 客戶端驗證對於所需的 字段。

+0

是否有可能在不使用資源文件的情況下替換這些消息?我需要攔截生成這些消息的地方並設置來自數據庫的本地化錯誤消息。謝謝。 – 2016-07-19 14:30:21

1

對於MVC3請參閱DataAnnotationsResources。它是「RequiredAttribute_ValidationError」等等。 您可以通過安裝.NET Framework語言包來解決此問題。

參見