2010-02-25 59 views
12

我正在使用ASP.NET MVC2並嘗試使用System.ComponentModel.DataAnnotations命名空間中的屬性來驗證我的視圖模型。ASP.NET MVC 2中的動態範圍驗證

如何動態設置RangeAttribute的允許有效範圍? 例如,如果我想驗證輸入的日期是否在預期範圍內。

這並不編譯:

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

因爲「的屬性參數必須是一個常量表達式,屬性參數類型的typeof運算表達式或數組創建表達式」。

我是否需要求助於創建自己的自定義驗證器?

回答

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; 
} 

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

+0

反正來驗證,如果我有兩個日期類型的屬性,如開始和結束日期,並確保開始使用不是結束後像這樣的一些方案(自定義驗證類,屬性)? – TheVillageIdiot 2012-01-19 11:54:25

0

您需要創建自己的屬性或使用基於none屬性的驗證框架。正如消息所說,任何屬性的所有參數都需要爲常量值。