Когда я реализую собственный атрибут, унаследованный от класса ValidationAttribute, я всегда переопределял метод bool IsValid(object value)
, который отбрасывает другой, прототип которого составляет ValidationResult IsValid(objet value, ValidationContext validationContext)
.Какой метод IsValid следует переопределить при реализации пользовательского ValidationAttribute
Возможно, я должен переопределить второй метод, даже если я не использую контекст проверки или результат (я использую проверку с EntityFramework и ModelState.IsValid
). Или продолжайте игнорировать перегруженный метод. Если тогда, могу ли я иметь объект, действительный или недействительный, в зависимости от контекста, активируется проверка атрибута? Является ли ситуация, показанная в приведенном ниже кодексе проблематичным?
class StrictlyPreviousAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var dateTime = value as DateTime?;
return dateTime == null || dateTime <= DateTime.Today;
}
}
class PreviousAttribute : StrictlyPreviousAttribute
{
public override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var dateTime = value as DateTime?;
if(dateTime == DateTime.Today)
{
return ValidationResult.Success;
}
else
{
return base.IsValid(object);
}
}
}
Я не знаю, есть ли какие-либо объективные заблуждения или если мне не хватает какой-то точки. Есть ли метод, который я должен лучше переопределить, а не другой. Должен ли я переопределить оба.
ValidationContext позволяет легко получить доступ к другим свойствам и был добавлен в .NET 4.0. Вот хорошее описание: http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2 –
@SteveGreene Я разместил соответствующие часть из предоставленной вами ссылки. Кредит ответа должен быть вашим. Благодарю. –