另一個MVC定位問題的整個列表...哪裏是默認的錯誤消息對DataAnnotations在MVC 3
我試圖使用本地化的資源文件中顯示的文本進行本地化的ASP.Net MVC 3應用程序意見,建議。
問題是,像往常一樣,試圖本地化數據註釋中的默認錯誤消息。
我知道你可以指定每個屬性的資源文件和密鑰:
[Required(
ErrorMessageResourceType = typeof(CustomResourceManager),
ErrorMessageResourceName = "ResourceKey")]
public string Username { get; set; }
,甚至,這是更好的首選,您可以覆蓋默認的消息,像這樣:Default resource for data annotations in ASP.NET MVC,這樣你就可以離開的屬性,如:
[Required]
public string Username { get; set; }
這最後一種方法是我在下面的一個,和它的作品,但只有當你想覆蓋DataAnnotation有一個且只有一個錯誤信息,因爲它總是會尋找一個資源鍵稱爲相同的屬性在自定義資源文件(例如, 「Required」需要資源文件中的「RequiredAttribute」條目)
其他屬性(如StringLength)具有多條錯誤消息,具體取決於您使用的可選參數。所以,如果你有這樣一個模型:
public class Person
{
[Required]
[StringLengthLocalizedAttribute(10, MinimumLength = 5)]
[Display(Name = "User name")]
public string UserName { get; set; }
}
的錯誤信息是「領域用戶名必須與的最小長度和的最大長度的字符串。 「
如果你改變了StringLength屬性到:
[StringLengthLocalizedAttribute(10)]
錯誤信息更改爲「該字段用戶名稱必須是最大長度爲的字符串。「所以,在這種情況下,至少有2個默認錯誤信息覆蓋,並給出瞭解決方案@ KIM-tranjan失敗
我的部分解決方案,這是實現這樣我自己StringLength屬性:
public class StringLengthLocalizedAttribute : StringLengthAttribute
{
public StringLengthLocalizedAttribute(int maximumLength) : base(maximumLength)
{
ErrorMessageResourceType = typeof(CustomValidationResource);
}
public override string FormatErrorMessage(string name)
{
ErrorMessageResourceName = MinimumLength > 0 ? "StringLengthAttributeMinMax" : "StringLengthAttributeMax";
return base.FormatErrorMessage(name);
}
}
如果我有一個本地化的資源「CustomValidationResource」利用有效信息,並將其設置爲ErrorMessageResourceType。然後,覆蓋FormatErrorMessage功能,我決定哪些消息字符串應適用取決於可選參數。
所以,這裏的問題是:是否有人k現在我們可以在哪裏找到DataAnnotation Attributes使用的所有資源鍵的列表,然後查看每個錯誤消息中有多少個不同的錯誤消息,而無需對每個錯誤消息進行測試?
甚至更好,我們可以讓原始的RESX文件看到字符串模板並使用相同的資源鍵本地化它們嗎?這樣,只更改ErrorMessageResourceType應該適用於所有DataAnnotations Attibutes,並且我不需要猜測將「{1}」或「{2}」放在我的本地化字符串中的位置。
感謝, 塞爾吉
您現在可以訪問.NET官方存儲庫 - http://referencesource.microsoft.com/#System.ComponentModel.DataAnnotations/Resources/DataAnnotationsResources.Designer.cs – Bakudan 2016-06-08 11:09:07