2010-07-22 35 views

回答

6
[DateOfBirth(MinAge = 0, MaxAge = 150)] 
public DateTime DateOfBirth { get; set; } 

// ... 

public class DateOfBirthAttribute : ValidationAttribute 
{ 
    public int MinAge { get; set; } 
    public int MaxAge { get; set; } 

    public override bool IsValid(object value) 
    { 
     if (value == null) 
      return true; 

     var val = (DateTime)value; 

     if (val.AddYears(MinAge) > DateTime.Now) 
      return false; 

     return (val.AddYears(MaxAge) > DateTime.Now); 
    } 
} 

你可以使用內置的 Range attribute

[Range(typeof(DateTime), 
     DateTime.Now.AddYears(-150).ToString("yyyy-MM-dd"), 
     DateTime.Now.ToString("yyyy-MM-dd"), 
     ErrorMessage = "Date of birth must be sane!")] 
public DateTime DateOfBirth { get; set; } 

+0

感謝您的回覆:我已經嘗試了上述代碼,並收到以下錯誤 「的屬性參數必須是常量表達式,屬性參數類型爲「 – beebul 2010-07-23 07:58:05

+0

@beebul」的typeof表達式或數組創建表達式:當然,對不起!在這種情況下,具有常量的'Range'驗證器在這種情況下沒有多大意義,所以我想你需要一個自定義驗證器。我會編輯我的答案... – LukeH 2010-07-23 09:03:56

+0

謝謝盧克,這是一種享受。應定期使用該屬性。乾杯! – beebul 2010-07-23 09:25:02