2010-07-22 6 views
5

Jemand muss das schon geschrieben haben :-)Wer hat ein Validierungsattribut für das Geburtsdatum für C# MVC?

Ich brauche ein Validierungsattribut für das Geburtsdatum, das überprüft, ob das Datum in einem bestimmten Bereich liegt - dh der Benutzer hat kein Datum eingegeben, das noch nicht passiert ist oder ist 150 Jahre in der Vergangenheit.

Danke für alle Hinweise!

Antwort

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

Sie könnten den integrierten in Range attribute verwenden:

[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

Vielen Dank für Ihre Antwort: Ich habe Ihren Code oben versucht und erhielt folgenden Fehler „Ein Attribut Argument muss ein konstanter Ausdruck sein, typeof Ausdruck oder Array-Erstellung Ausdruck eines Attributs Parametertyp " – beebul

+0

@beebul: Natürlich, sorry! Ein 'Range'-Validator mit Konstanten würde in diesem Fall nicht viel Sinn ergeben, also denke ich, dass Sie einen benutzerdefinierten Validator benötigen. Ich bearbeite meine Antwort ... – LukeH

+0

Dank Luke, die ein Leckerbissen funktioniert. Verwenden Sie dieses Attribut regelmäßig. Prost! – beebul

Verwandte Themen