如何从自定义属性获取属性的显示名称

Kum*_*mar 4 c# asp.net data-annotations asp.net-mvc-2

我正在尝试创建一个最小长度验证属性,该属性将强制用户在文本框中输入指定的最小字符数

    public sealed class MinimumLengthAttribute : ValidationAttribute
        {
            public int MinLength { get; set; }

            public MinimumLengthAttribute(int minLength)
            {
                MinLength = minLength;
            }

            public override bool IsValid(object value)
            {
                if (value == null)
                {
                    return true;
                }
                string valueAsString = value as string;
                return (valueAsString != null && valueAsString.Length >= MinLength);

  }
    }
Run Code Online (Sandbox Code Playgroud)

在MinimumLengthAttribute的构造函数中,我想设置错误消息,如下所示:

ErrorMessage ="{0}必须至少为{1}个字符"

如何获取属性的显示名称以便填充{0}占位符?

fre*_*ezq 6

{0}占位符与值自动填充[Display(Name="<value>")],如果[Display(Name="")]属性不存在,那么将采取名称的属性.


mar*_*ind 3

如果您的错误消息有多个占位符,那么您的属性还应该重写FormatErrorMessage方法,如下所示:

public override string FormatErrorMessage(string name) {
    return String.Format(ErrorMessageString, name, MinLength);
}
Run Code Online (Sandbox Code Playgroud)

并且您应该调用构造函数重载之一来指定属性的默认错误消息:

public MinimumLengthAttribute()
    : base("{0} must be at least {1} characters long") {
}
Run Code Online (Sandbox Code Playgroud)