Я хочу создать пользовательский атрибут, унаследовав StringLengthAttribute
.Причина в том, что мне нужно использовать динамическое сообщение об ошибке.По умолчанию ErrorMessage поддерживает только постоянное сообщение.Это работает, когда я использую проверку по умолчанию без постоянного сообщения.
public class CustomerProfile
{
public string Username { get; set; }
[StringLength(10,ErrorMessage ="Original Error Message")]
public string Name { get; set; }
public string Mobile { get; set; }
public string Email { get; set; }
}
Но когда я использую код ниже для создания пользовательского сообщения, этоотображается как всплывающее окно с предупреждением вместо отображения сообщения проверки над текстовым полем.
public class CustomerProfile
{
public string Username { get; set; }
//[StringLength(10,ErrorMessage ="Original Error Message")]
[MaxNameLengthAttributes(10)]
public string Name { get; set; }
public Gender Gender { get; set; }
public string Mobile { get; set; }
public string Email { get; set; }
}
public class MaxNameLengthAttributes : StringLengthAttribute
{
private readonly int _maxWords;
public MaxNameLengthAttributes(int maxWords) : base(maxWords)
{
_maxWords = maxWords;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value == null)
return new ValidationResult("Name required");
var textValue = value.ToString();
if (textValue.Length <= _maxWords)
return ValidationResult.Success;
var errorMessage = string.Format("max length is {0}",_maxWords);
return new ValidationResult(errorMessage);
}
}
Как создать собственное сообщение путем наследованияатрибут по умолчанию и отображать сообщение проверки над текстовым полем вместо всплывающего окна с предупреждением?
Замечания:
Если унаследован атрибут StringLength, предполагается, что он работает нормально без использования IClientValidatable.И сообщение, предположим, не станет всплывающим оповещением, пропущена часть?