2010-07-22 11 views
5

Ktoś musiał to wcześniej napisać :-)Ktoś ma atrybut walidacji daty urodzenia dla C# MVC?

Potrzebuję atrybutu sprawdzania poprawności dla daty urodzenia, który sprawdza, czy data jest w określonym zakresie - tj. Użytkownik nie wprowadził daty, która jeszcze się nie wydarzyła lub ma 150 lat w przeszłości.

Dzięki za wszelkie wskazówki!

Odpowiedz

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

Można użyć wbudowanych 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

dzięki za odpowiedź: Próbowałem swój kod powyżej i otrzymała następujący błąd „atrybut Argument musi być wyrażeniem stałym, wyrażeniem typu lub wyrażeniem tworzenia tablicy typu parametru atrybutu " – beebul

+0

@beebul: Oczywiście, przepraszam! Walidator 'Range' ze stałymi nie miałby większego sensu w tym przypadku, więc myślę, że będziesz potrzebował niestandardowego walidatora. Zmienię moją odpowiedź ... – LukeH

+0

Dzięki Luke, że działa uczta. Używać tego atrybutu regularnie. Twoje zdrowie! – beebul

Powiązane problemy