Я использую ASP.NET MVC с DataAnnotations. Я создал следующий пользовательский 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; }
}