Asp.net mvc 3 修改StringLength验证的默认错误消息

Asp.net mvc 3 修改StringLength验证的默认错误消息,asp.net-mvc-3,validation,entity-framework-4,Asp.net Mvc 3,Validation,Entity Framework 4,StringLength验证的默认ErrorMessage比我希望的要长得多: 字段{Name}必须是最大长度为{StringLength}的字符串 我想把它改成这样: 最大长度为{StringLength} 我希望避免为我声明的每个字符串重复指定ErrorMessage: [StringLength(20, ErrorMessage="Maximum length is 20")] public string OfficePhone { get; set; } [Str

StringLength验证的默认ErrorMessage比我希望的要长得多:

字段{Name}必须是最大长度为{StringLength}的字符串

我想把它改成这样:

最大长度为{StringLength}

我希望避免为我声明的每个字符串重复指定ErrorMessage:

    [StringLength(20, ErrorMessage="Maximum length is 20")]
    public string OfficePhone { get; set; }
    [StringLength(20, ErrorMessage="Maximum length is 20")]
    public string CellPhone { get; set; }
我非常确定我记得有一种简单的方法可以普遍更改错误消息,但却记不起来

编辑:

为了澄清,我正在尝试更改默认的ErrorMessage,以便输入:

    [StringLength(20)]
    public string OfficePhone { get; set; }
并让错误消息显示:

最大长度为20

试一试


如果我没记错的话,应该是这样。

您可以在许多属性上指定StringLength属性,如下所示

[StringLength(20, ErrorMessageResourceName = "StringLengthMessage", ErrorMessageResourceType = typeof(Resource))]
public string OfficePhone { get; set; }
[StringLength(20, ErrorMessageResourceName = "StringLengthMessage", ErrorMessageResourceType = typeof(Resource))]
public string CellPhone { get; set; }
并在资源文件中添加字符串资源(名为
StringLengthMessage

"Maximum length is {1}"
消息只定义了一次,如果您改变了对测试长度的看法,则消息的位置保持不变

您可以指定以下内容:

  • {0}-名称
  • {1} -最大长度
  • {2} -最小长度
  • 更新

    为了进一步减少重复,您可以将StringLengthAttribute子类化:

    public class MyStringLengthAttribute : StringLengthAttribute
    {
        public MyStringLengthAttribute() : this(20)
        {
        }
    
        public MyStringLengthAttribute(int maximumLength) : base(maximumLength)
        {
            base.ErrorMessageResourceName = "StringLengthMessage";
            base.ErrorMessageResourceType = typeof (Resource);
        }
    }
    
    或者,如果要添加其他参数,可以覆盖
    FormatErrorMessage
    。现在,属性如下所示:

    [MyStringLength]
    public string OfficePhone { get; set; }
    [MyStringLength]
    public string CellPhone { get; set; }
    

    将错误消息添加到资源文件意味着只指定了一次。@WernerStrydom,请发布一个关于如何只指定一次的答案,因为这是我的问题。是的,我在稍后重新阅读您的问题后注意到了这一点。但是看起来你已经得到了你现在想要的完整答案。@Yarx:你在哪里找到字符串格式的占位符值的?它不在MSDN文档中。我不记得了,但是在查看StringLengthAttribute的源代码时,您可以在那里找到占位符逻辑。{0}=字段名,{1}=最大长度,{2}=最小长度这有一种方法可以覆盖默认值,而不必为我的架构中的每个用户输入的字符串设置
    ErrorMessageResourceName=“StringLengthMessage”,ErrorMessageResourceType=typeof(Resource))]
    ?否。但是您可以对StringLengthAttribute进行子类化并指定默认值。请参阅我答案的更新。我是否可以指定强度(即
    [MyStringLength(30)]
    ?这是否有帮助?在构造函数中手动设置您认为合适的最小长度。
    [MyStringLength]
    public string OfficePhone { get; set; }
    [MyStringLength]
    public string CellPhone { get; set; }