Используя MVC3 и EF4.1, как проверить на клиенте и сервере более одного поля в моей модели представления?
У меня есть текстовое поле даты начала (которое можно изменить), и у меня есть исходная дата начала в скрытом поле. Когда пользователь отправляет форму, я хочу убедиться, что измененная начальная дата не превышает одного месяца по обе стороны от первоначальной начальной даты.
Я не могу понять, как это можно сделать с помощью DataAnnotation и CustomValidation (или, возможно, я иду по неправильному пути)? Вот пример того, с чем я работал:
[MetadataType(typeof(Metadata.MyUserMetaData))]
public partial class MyUser
{
public System.DateTime DateOfBirth { get; set; }
}
Частичный класс
public class MyUserMetaData
{
[CustomValidation(typeof(AmendedStartDate), "amendedstartdate", ErrorMessage = "Invalid date."]
public DateTime StartDate { get; set; };
public DateTime OriginalStartDate { get; set; };
}
Пользовательский валидатор
public class AmendedStartDate : ValidationAttribute, IClientValidatable
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// How do I get multiple field values from object value?
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(Modelmetadata metadate, ControllerContext context)
{
var rule = new ModelClientValidationRule
{
ErrorMessage = FormatErrorMessage(metadata.GetDisplayName()),
ValidationType = "amendedstartdate"
};
yield return rule;
}
}
Я знаю, что все еще добавляю jQuery в представление для этого валидатора.