С тех пор я использовал отличный FluentValidation для проверки моих классов моделей. В веб-приложениях я использую его совместно с плагином jquery.validate, чтобы выполнить проверку на стороне клиента. Один из недостатков заключается в том, что большая часть логики проверки повторяется на стороне клиента и больше не централизована в одном месте.
По этой причине я ищу альтернативу. Есть много примеров там, показывающих использование аннотаций данных для выполнения проверки модели. Это выглядит очень многообещающе. Одна вещь, которую я не мог узнать, - это проверить свойство, которое зависит от другого значения свойства.
Возьмем, например, следующую модель:
public class Event
{
[Required]
public DateTime? StartDate { get; set; }
[Required]
public DateTime? EndDate { get; set; }
}
Я хотел бы убедиться, что EndDate
больше, чем StartDate
. Я мог бы написать обычай
атрибут валидации, расширяющий ValidationAttribute, чтобы выполнить пользовательскую логику проверки. К сожалению, я не мог найти способ получить
пример модели:
public class CustomValidationAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
// value represents the property value on which this attribute is applied
// but how to obtain the object instance to which this property belongs?
return true;
}
}
Я обнаружил, что CustomValidationAttribute, похоже, выполняет эту работу, потому что у нее есть это свойство ValidationContext
, которое содержит проверяемый экземпляр объекта. К сожалению, этот атрибут был добавлен только в .NET 4.0. Поэтому мой вопрос: могу ли я достичь той же функциональности в .NET 3.5 SP1?
UPDATE:
Кажется, что FluentValidation уже поддерживает проверку и метаданные клиентов в ASP.NET MVC 2.
Тем не менее было бы полезно знать, что если аннотации данных могут использоваться для проверки зависимых свойств.