用于StringLength验证的默认ErrorMessage比我想要的长得多:



我想将其普遍更改为:



我想避免为我声明的每个字符串重复指定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; }

并显示错误消息:

最佳答案

您可以在多个属性上指定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; }
    

    关于asp.net-mvc-3 - 修改默认的ErrorMessage以进行StringLength验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9540314/

    10-10 11:12