Tengo una clase de cliente que tiene propiedades PhoneNumber y Email. Usando DataAnnotations puedo decorar las propiedades con atributos de validación DataType, pero no puedo ver lo que me está obteniendo.¿Existe una buena referencia para las anotaciones de datos con respecto a cómo funciona DataType?
Por ejemplo:
[DataType(DataType.PhoneNumber)]
public string PhoneNumber {get; set;}
tengo una prueba de unidad que asignó "1515999A" a esta propiedad. Cuando paso por el corredor de validación, el valor se considera válido para un número de teléfono. Hubiera pensado que esto debería ser inválido.
Busqué alrededor de algunos, pero no pude encontrar una explicación decente de lo que atrapan los diversos tipos de datos enumerados. ¿Hay alguna referencia que valga la pena en alguna parte?
Editar:
Aquí son las tripas de lo que estoy usando para un corredor de validación ...
public virtual XLValidationIssues ValidateAttributes<TEntity>(TEntity entity)
{
var validationIssues = new XLValidationIssues();
// Get list of properties from validationModel
var props = entity.GetType().GetProperties();
// Perform validation on each property
foreach (var prop in props)
ValidateProperty(validationIssues, entity, prop);
// Return the list
return validationIssues;
}
protected virtual void ValidateProperty<TEntity>(XLValidationIssues validationIssues, TEntity entity, PropertyInfo property)
{
// Get list of validator attributes
var validators = property.GetCustomAttributes(typeof(ValidationAttribute), true);
foreach (ValidationAttribute validator in validators)
ValidateValidator(validationIssues, entity, property, validator);
}
protected virtual void ValidateValidator<TEntity>(XLValidationIssues validationIssues, TEntity entity, PropertyInfo property, ValidationAttribute validator)
{
var value = property.GetValue(entity, null);
if (!validator.IsValid(value))
validationIssues.Add(new XLValidationIssue(property.Name, value, validator.FormatErrorMessage(property.Name, value)));
}
Es este marco en 3.5 o 4.0? ¿Qué corredor de validación estás usando? –
Buen comentario. Estoy usando 3.5 y estoy usando un corredor de validación personalizado bastante simple (publicando el código anterior). –