修改StringLength验证的默认ErrorMessage

snu*_*mpy 28 validation entity-framework-4 asp.net-mvc-3

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; }
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

    [StringLength(20)]
    public string OfficePhone { get; set; }
Run Code Online (Sandbox Code Playgroud)

并有错误消息说:

最大长度为20.

blo*_*aak 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; }
Run Code Online (Sandbox Code Playgroud)

StringLengthMessage在资源文件中添加字符串资源(已命名)

"Maximum length is {1}"
Run Code Online (Sandbox Code Playgroud)

消息定义一次,并且如果您改变了关于要测试的长度的想法,则有一个可变的占位符.

您可以指定以下内容:

  1. {0} - 姓名
  2. {1} - 最大长度
  3. {2} - 最小长度

更新

为了进一步减少重复,您可以继承StringLengthAttribute:

public class MyStringLengthAttribute : StringLengthAttribute
{
    public MyStringLengthAttribute() : this(20)
    {
    }

    public MyStringLengthAttribute(int maximumLength) : base(maximumLength)
    {
        base.ErrorMessageResourceName = "StringLengthMessage";
        base.ErrorMessageResourceType = typeof (Resource);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,FormatErrorMessage如果要添加其他参数,则可以覆盖.现在属性如下所示:

[MyStringLength]
public string OfficePhone { get; set; }
[MyStringLength]
public string CellPhone { get; set; }
Run Code Online (Sandbox Code Playgroud)


Nic*_*cht 6

尝试

[ StringLength(20, ErrorMessage = "Maximum length is {1}") ]
Run Code Online (Sandbox Code Playgroud)

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