2012-05-24 24 views
0

我試圖添加數據驗證,以我的DateTime Attribut我想DateTime.now.addyears(+1) 這之後,迫使用戶DateTime.Now小則一個歲之間選擇日期是我的代碼:數據Annonation定製Attribut [DATETIME]

public class DateDebut : ValidationAttribute 
     { 
      public override bool IsValid(object value) 
      { 
       if (value == null) return false; 
       DateTime enteredDate = (DateTime)value; 

       if ((enteredDate >= DateTime.Now) && (enteredDate <= DateTime.Now.AddYears(+1))) 
        return true; 
       else 
        return false; 
      } 
     } 
     [Required] 
     [Display(Name = "De : ")] 
     [DataType(DataType.Date)] 
     [DateDebut(ErrorMessage="Date invalide")] 
     public DateTime dd { get; set; } 

這個自定義驗證dosn't工作,驗證沒有得到執行,ai認爲我錯過了真正簡單的東西?

+0

它工作正常,我 – VJAI

回答

2

我同意丹尼爾completelt,

不過,我發現,當我需要做性能對比在我的模型我用IValidatableObject

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.ivalidatableobject.aspx

我發現它更快,更簡單大多數小類型的比較 你會有一些看起來像這樣

public class myModel : IvalidatableObject 
{ 
string debut = DateTime.Now.ToShortDateString(); 
string fin = DateTime.Now.AddYears(+1).ToShortDateString(); 
[Required] 
[Display(Name = "De : ")] 
[DataType(DataType.Date)] 
public DateTime dd { get; set; } 

    public IEnumerable<ValidationResult> Validate() 
    { 
    if(this.debut > this.fin) 
    { 
     yield return new ValidationResult("debut cannot be greated then fin"); 
    } 
    } 
} 

讀了,看看什麼你最好

+0

人無我有想你的方法,但它dosnt工作 – Chlebta

+0

更新的Post請檢查 – Chlebta

+0

沒有原因,這難道不工作。 發佈您的控制器操作代碼。併爲您的視圖的代碼 –

1

屬性本質上是靜態的。你有沒有考慮寫自己的屬性進行驗證?在網絡上有幾個例子可以幫助你開始。

您也可以繼承RangeAttribute並根據需要進行注入。

+0

郵政更新,請檢查一下 – Chlebta