Проверка динамического диапазона в ASP.NET MVC 2
Я использую ASP.NET MVC2 и пытаюсь проверить мои модели просмотра, используя атрибуты в пространстве имен System.ComponentModel.DataAnnotations.
Как я могу динамически установить допустимый допустимый диапазон RangeAttribute?
Например, если я хочу проверить, что введенная дата находится в ожидаемом диапазоне.
Это не скомпилируется:
[Range(typeof(DateTime),
DateTime.Today.ToShortDateString(),
DateTime.Today.AddYears(1).ToShortDateString())]
public DateTime DeliveryDate { get; set; }
потому что "атрибут-атрибут должен быть константным выражением, выражением типаof или выражением создания массива типа параметра атрибута".
Нужно ли мне прибегать к созданию собственного пользовательского валидатора?
Ответы
Ответ 1
ОК, нашел ответ..NET Framework 4 предоставляет новый атрибут CustomValidationAttribute, который делает возможным следующее:
[Required]
[DisplayName("Ideal Delivery Date")]
[CustomValidation(typeof(HeaderViewModel), "ValidateDeliveryDate")]
public DateTime DeliveryDate { get; set; }
public static ValidationResult ValidateDeliveryDate(DateTime deliveryDateToValidate)
{
if (deliveryDateToValidate.Date < DateTime.Today)
{
return new ValidationResult("Delivery Date cannot be in the past.");
}
if (deliveryDateToValidate.Date > DateTime.Today.AddYears(1))
{
return new ValidationResult("Delivery Date must be within the next year.");
}
return ValidationResult.Success;
}
http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.customvalidationattribute%28VS.100%29.aspx
Ответ 2
Вам нужно создать свой собственный атрибут или использовать структуру проверки на основе атрибута none. Как сказано в сообщении, все параметры для любого атрибута должны быть постоянными значениями.