2010-07-22 40 views

Trả lời

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

Bạn có thể sử dụng được xây dựng trong 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

Cảm ơn trả lời của bạn: Tôi đã thử mã của bạn ở trên và nhận được lỗi sau "Một thuộc tính đối số phải là một biểu thức liên tục, biểu thức typeof hoặc biểu thức tạo mảng của kiểu tham số thuộc tính " – beebul

+0

@beebul: Tất nhiên, xin lỗi! Trình xác nhận 'Range' có hằng số sẽ không có ý nghĩa nhiều trong trường hợp này, vì vậy tôi đoán bạn sẽ cần trình xác thực tùy chỉnh. Tôi sẽ chỉnh sửa câu trả lời của mình ... – LukeH

+0

Cảm ơn Luke đã làm việc điều trị. Sẽ sử dụng thuộc tính đó thường xuyên. Chúc mừng! – beebul

Các vấn đề liên quan