2010-07-22 19 views

Respuesta

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

Usted podría utilizar el 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

Gracias por su respuesta: He probado el código anterior y recibió el siguiente error "Un atributo El argumento debe ser una expresión constante, un tipo de expresión o una expresión de creación de matriz de un tipo de parámetro de atributo " – beebul

+0

@beebul: ¡Por supuesto, lo siento! Un validador 'Range' con constantes no tendría mucho sentido en este caso, así que supongo que necesitará un validador personalizado. Voy a editar mi respuesta ... – LukeH

+0

Gracias Luke que funciona bien. Deberá usar ese atributo regularmente. ¡Aclamaciones! – beebul

Cuestiones relacionadas