我正在使用带有DataAnnotations的ASP.NET MVC.我创建了以下自定义ValidationAttribute,它可以正常工作.
public class StringRangeAttribute : ValidationAttribute { public int MinLength { get; set; } public int MaxLength { get; set; } public StringRangeAttribute(int minLength,int maxLength) { this.MinLength = (minLength < 0) ? 0 : minLength; this.MaxLength = (maxLength < 0) ? 0 : maxLength; } public override bool IsValid(object value) { //null or empty is <em>not</em> invalid string str = (string)value; if (string.IsNullOrEmpty(str)) return true; return (str.Length >= this.MinLength && str.Length <= this.MaxLength); } }
但是,出现的错误消息是标准的“字段*无效”.我想将其更改为:“[DisplayName]必须介于[minlength]和[maxlength]之间”,但我无法弄清楚如何从此类中获取DisplayName甚至字段的名称.
谁知道?
解决方法
稍微修改过的StringLengthAttribute:
public class StringRangeAttribute : ValidationAttribute { // Methods public StringRangeAttribute(int minimumLength,int maximumLength) : base(() => "The {0} must be between {1} and {2} chars long.") { MaximumLength = maximumLength; MinimumLength = minimumLength; } public override string FormatErrorMessage(string name) { return string.Format(CultureInfo.CurrentCulture,ErrorMessageString,new object[] { name,MinimumLength,MaximumLength }); } public override bool IsValid(object value) { if (value != null) { return (((string)value).Length <= MaximumLength) && (((string)value).Length >= MinimumLength); } return true; } public int MaximumLength { get; set; } public int MinimumLength { get; set; } }