2010-07-22 9 views

risposta

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

È possibile utilizzare il built-in 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

Grazie per la risposta: Ho provato il tuo codice di cui sopra e ha ricevuto il seguente errore "Un attributo l'argomento deve essere un'espressione costante, typeof espressione o espressione di creazione dell'array di un tipo di parametro attributo " – beebul

+0

@beebul: naturalmente, mi dispiace! Un validatore 'Range' con costanti non avrebbe molto senso in questo caso, quindi suppongo che avrai bisogno di un validatore personalizzato. Modificherò la mia risposta ... – LukeH

+0

Grazie Luca, che funziona bene. Userà regolarmente questo attributo. Saluti! – beebul

Problemi correlati