Ho una classe cliente che ha sia proprietà PhoneNumber che Email. Utilizzo di DataAnnotations Posso decorare le proprietà con gli attributi di convalida DataType, ma non riesco a vedere cosa mi stia facendo.Esiste un buon riferimento per le annotazioni dei dati in merito a come funziona DataType?
Ad esempio:
[DataType(DataType.PhoneNumber)]
public string PhoneNumber {get; set;}
ho una prova di unità che ha assegnato "1515999A" a questa proprietà. Quando passo il runner di validazione il valore è considerato valido per un numero di telefono. Avrei pensato che questo non dovrebbe essere valido.
Ho cercato in giro un po 'ma non sono riuscito a trovare una spiegazione decente di ciò che i vari DataType enumerati effettivamente catturano. C'è qualche riferimento utile da qualche parte?
Edit:
Ecco le budella di quello che sto usando per un corridore di convalida ...
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)));
}
È questo in framework 3.5 o 4.0? Quale corridore di validazione stai usando? –
Buon commento. Sto usando 3.5 e sto usando un runner di convalida personalizzato abbastanza semplice (postando il codice sopra). –