首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >其中是MVC3中DataAnnotations的默认错误消息的完整列表

其中是MVC3中DataAnnotations的默认错误消息的完整列表
EN

Stack Overflow用户
提问于 2011-05-25 16:35:23
回答 3查看 10.9K关注 0票数 17

还有另一个MVC本地化问题...

我正在尝试使用本地化的资源文件来本地化ASP.Net MVC3应用程序,以按照推荐的方式在视图中显示文本。

问题是,像往常一样,当试图本地化来自数据注释的默认错误消息时。

我知道您可以在每个属性中指定资源文件和键:

代码语言:javascript
复制
[Required(
ErrorMessageResourceType = typeof(CustomResourceManager), 
ErrorMessageResourceName = "ResourceKey")]
public string Username { get; set; }

甚至,您可以覆盖默认消息,比如:Default resource for data annotations in ASP.NET MVC,这样您就可以保留如下属性:

代码语言:javascript
复制
[Required]
public string Username { get; set; }

最后一种方法就是我所遵循的方法,它只在您想要覆盖的DataAnnotation有且只有一条错误消息时才起作用,因为它总是查找与自定义资源文件中的属性相同的资源键(例如"Required“需要在资源文件中有"RequiredAttribute”项)

其他属性,如StringLength,根据您使用的可选参数,会有多个错误消息。所以,如果你有一个这样的模型:

代码语言:javascript
复制
public class Person
{
    [Required]
    [StringLengthLocalizedAttribute(10, MinimumLength = 5)]
    [Display(Name = "User name")]
    public string UserName { get; set; }
}

错误消息是“The field User name ”必须是一个字符串,其最小长度为 5 ,最大长度为< 10.“>E213

如果将StringLength属性更改为:

代码语言:javascript
复制
    [StringLengthLocalizedAttribute(10)]

错误消息更改为“the field User name be a string with kim length of 10.”“,因此,在本例中,至少有2条默认错误消息需要覆盖,并且@kim-tranjan提供的解决方案失败。

我的部分解决方案是实现我自己的StringLength属性,如下所示:

代码语言:javascript
复制
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函数,根据可选参数决定应用哪个消息字符串。

所以,这里的问题是:有谁知道我们可以在哪里找到DataAnnotation属性使用的整个资源键列表,然后查看每个属性中有多少不同的错误消息,而不是测试每个错误消息?

或者更好的是,我们可以使用原始的RESX文件来查看字符串模板并使用相同的资源键对其进行本地化吗?这样,只更改ErrorMessageResourceType应该对所有DataAnnotations属性都有效,并且我不需要猜测在本地化字符串中应该将"{1}“或"{2}”放在哪里。

谢谢,Sergi

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6121650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档