修改StringLength验证的默认ErrorMessage

时间:2012-03-02 21:01:32

标签: 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; }
    [StringLength(20, ErrorMessage="Maximum length is 20")]
    public string CellPhone { get; set; }

我很确定我记得有一种简单的方法来普遍改变ErrorMessage但却无法回想起它。

编辑:

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

    [StringLength(20)]
    public string OfficePhone { get; set; }

并输入错误消息:

  

最大长度为20。

2 个答案:

答案 0 :(得分:57)

您可以在众多属性

上指定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}"

消息是一次定义的,并且如果你改变了对要测试的长度的想法,它就有一个可变的占位符。

您可以指定以下内容:

  1. {0} - 姓名
  2. {1} - 最大长度
  3. {2} - 最小长度
  4. <强>更新

    为了进一步减少重复,您可以继承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; }
    

答案 1 :(得分:6)

尝试

[ StringLength(20, ErrorMessage = "Maximum length is {1}") ]

如果我没记错的话应该是它。