He creado un atributo de validación personalizado mediante la subclase de ValidationAttribute. El atributo se aplica a mi modelo de vista en el nivel de clase, ya que necesita validar más de una propiedad.No se pueden establecer los nombres de los miembros del atributo de validación personalizado en MVC2
estoy preponderantes con
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
y volviendo:
new ValidationResult("Always Fail", new List<string> { "DateOfBirth" });
en todos los casos en los que DateOfBirth es una de las propiedades de mi modelo de vista.
Cuando ejecuto mi aplicación, puedo ver que se está recibiendo un golpe. ModelState.IsValid se establece en falso correctamente, pero cuando inspecciono el contenido de ModelState, veo que Property DateOfBirth NO contiene ningún error. En cambio, tengo una clave de cadena vacía con un valor de nulo y una excepción que contiene la cadena que especifiqué en mi atributo de validación.
Esto no genera ningún mensaje de error en mi interfaz de usuario al usar ValidationMessageFor. Si uso ValidationSummary, entonces puedo ver el error. Esto es porque no está asociado con una propiedad.
Parece que está ignorando el hecho de que he especificado el nombre de miembro en el resultado de la validación.
¿Por qué es esto y cómo lo arreglo?
EJEMPLO DE CÓDIGO SOLICITADA:
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class ExampleValidationAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// note that I will be doing complex validation of multiple properties when complete so this is why it is a class level attribute
return new ValidationResult("Always Fail", new List<string> { "DateOfBirth" });
}
}
[ExampleValidation]
public class ExampleViewModel
{
public string DateOfBirth { get; set; }
}
Gracias. Entonces, ¿el equipo de MVC está reutilizando la clase ValidationResult pero haciendo caso omiso de una de las propiedades? En general, estoy muy impresionado por la salida del equipo de MVC, pero esto es bastante malo. Acabo de comprobarlo en MVC3/.NET4 y sigue siendo el mismo. –