ASP.NET MVC 2中的动态范围验证

Ian*_*son 12 validation asp.net-mvc

我正在使用ASP.NET MVC2并尝试使用System.ComponentModel.DataAnnotations命名空间中的属性验证我的视图模型.

如何动态设置RangeAttribute的允许有效范围?例如,如果我想验证输入的日期是否在预期范围内.

这不编译:

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

因为"属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式".

我是否需要求助于创建自己的自定义验证器?

Ian*_*son 15

好的,找到了答案..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;
}
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.customvalidationattribute%28VS.100%29.aspx