Проверка динамического диапазона в ASP.NET MVC 2 - PullRequest
12 голосов
/ 25 февраля 2010

Я использую ASP.NET MVC2 и пытаюсь проверить модели моего представления, используя атрибуты в пространстве имен System.ComponentModel.DataAnnotations.

Как я могу динамически установить допустимый допустимый диапазон RangeAttribute? Например, если я хочу проверить, что введенная дата находится в ожидаемом диапазоне.

Это не компилируется:

[Range(typeof(DateTime), 
        DateTime.Today.ToShortDateString(), 
        DateTime.Today.AddYears(1).ToShortDateString())]
    public DateTime DeliveryDate { get; set; }

потому что «аргумент атрибута должен быть константным выражением, выражением typeof или выражением создания массива типа параметра атрибута».

Нужно ли прибегать к созданию собственного пользовательского валидатора?

Ответы [ 2 ]

15 голосов
/ 25 февраля 2010

ОК, нашел ответ. .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

0 голосов
/ 25 февраля 2010

Вам необходимо создать свой собственный атрибут или использовать платформу проверки без атрибутов.Как говорится в сообщении, все параметры любого атрибута должны быть постоянными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...