2010-02-25 15 views
12

Estoy utilizando ASP.NET MVC2 e intento validar mis modelos de vista utilizando los atributos del espacio de nombres System.ComponentModel.DataAnnotations.Validación de rango dinámico en ASP.NET MVC 2

¿Cómo puedo establecer dinámicamente el rango válido permitido de un RangeAttribute? Por ejemplo, si deseo validar que una fecha ingresada está dentro de un rango esperado.

Esto no se compila:

[Range(typeof(DateTime), 
     DateTime.Today.ToShortDateString(), 
     DateTime.Today.AddYears(1).ToShortDateString())] 
    public DateTime DeliveryDate { get; set; } 

porque "un argumento atributo debe ser una expresión constante, typeof expresión o la matriz de expresión creación de un tipo de parámetro de atributo".

¿Tengo que recurrir a la creación de mi propio validador personalizado?

Respuesta

15

OK, encontré la respuesta. .NET Framework 4 proporciona una nueva CustomValidationAttribute que hace posible lo siguiente:

[Required] 
[DisplayName("Ideal Delivery Date")] 
[CustomValidation(typeof(HeaderViewModel), "ValidateDeliveryDate")] 
public DateTime DeliveryDate { get; set; } 

public static ValidationResult ValidateDeliveryDate(DateTime deliveryDateToValidate) 
{ 
    if (deliveryDateToValidate.Date < DateTime.Today) 
    { 
    return new ValidationResult("Delivery Date cannot be in the past."); 
    } 

    if (deliveryDateToValidate.Date > DateTime.Today.AddYears(1)) 
    { 
    return new ValidationResult("Delivery Date must be within the next year."); 
    } 

    return ValidationResult.Success; 
} 

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.customvalidationattribute%28VS.100%29.aspx

+0

De todos modos para validar si tengo dos propiedades de tipo fecha como inicio y de finalización y asegúrese de que no es de inicio después del fin de utilizar algún esquema como este (clase de validación personalizada, atributos)? – TheVillageIdiot

0

Debe crear su propio atributo o utilizar un marco de validación basado en ningún atributo. Como dice el mensaje, todos los parámetros de cualquier atributo deben ser valores constantes.

Cuestiones relacionadas