另一个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