Tenemos una necesidad dentro de nuestra lógica de iterar a través de las propiedades de un modelo para unir automáticamente las propiedades y queremos extender la funcionalidad para incluir las nuevas anotaciones de datos en C# 4.0.¿Cómo llamar a ValidationAttributes manualmente? (DataAnnotations and ModelState)
Por el momento, básicamente iterar sobre cada propiedad cargando en todas las instancias ValidationAttribute y tratando de validar usando la función Validate/IsValid, pero esto no parece funcionar para mí.
A modo de ejemplo, tengo un modelo como:
public class HobbyModel
{
[Required(AllowEmptyStrings = false, ErrorMessage = "Do not allow empty strings")]
[DisplayName("Hobby")]
[DataType(DataType.Text)]
public string Hobby
{
get;
set;
}
}
Y el código para comprobar los atributos es:
object[] attributes = propertyInfo.GetCustomAttributes(true);
TypeConverter typeConverter =
TypeDescriptor.GetConverter(typeof(ValidationAttribute));
bool isValid = false;
foreach (object attr in attributes)
{
ValidationAttribute attrib = attr as ValidationAttribute;
if (attrib != null)
{
attrib.Validate(obj, propertyInfo.Name);
}
}
He depurado el código y el modelo tiene 3 atributos , 2 de los cuales se derivan de ValidationAttribute, pero cuando el código pasa a través de la función Validate (con un valor vacío o nulo) arroja una excepción como se esperaba.
Espero estar haciendo algo tonto, entonces me pregunto si alguien ha usado esta funcionalidad y podría ayudar.
Gracias de antemano, Jamie
Tiene un ejemplo del uso de DataAnnotations 4.0 con ASP.Net MVC 3.0, actualmente estoy usando 3.5 (que puede funcionar o no, estoy actualizando el código de MVC 1.0 a 3) – Jamie
Si no soy Por error, MVC 2 y arriba funcionan con DataAnnotaciones por defecto, por lo que cuando trabaje con MVC 3 no tendrá que llamar al validador manualmente. – Steven
Básicamente, queremos descargar el proceso en un mecanismo separado, por lo que queremos poder autoenlazar y ejecutar la validación manualmente. – Jamie