С тех пор я использовал отличную библиотеку FluentValidation для проверки моих классов моделей. В веб-приложениях я использую его вместе с плагином jquery.validate для проверки валидации на стороне клиента. Один из недостатков заключается в том, что большая часть логики проверки повторяется на стороне клиента и больше не централизована в одном месте.Пользовательская проверка модели зависимых свойств с использованием аннотаций данных
По этой причине я ищу альтернативу. Имеются примеры many из there, показывающие использование аннотаций данных для выполнения проверки модели. Это выглядит очень многообещающе. Одна вещь, которую я не мог узнать, - это проверить свойство, которое зависит от другого значения свойства.
Давайте возьмем для примера следующую модель:
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 already supports клиентской валидации и метаданных в ASP.NET MVC 2.
Тем не менее, было бы хорошо знать, хотя, если аннотации данных могут быть использованы для проверки зависимых свойств ,
Есть ли у вас или кто-либо выяснил способ получения данных и обработки FluentValidation (для проверки) вместе в одном классе/модели? если бы это было фантастично, у меня есть тема об этом обсуждении с автором FV Джереми, вы можете посмотреть здесь: http://fluentvalidation.codeplex.com/Thread/View.aspx?ThreadId=212371 –