2010-04-29 4 views

Répondre

6

pas de moi, mais mon ami Steve Sanderson:

internal static class DataAnnotationsValidationRunner 
{ 
    public static IEnumerable<ErrorInfo> GetErrors(object instance) 
    { 
     return from prop in TypeDescriptor.GetProperties(instance).Cast<PropertyDescriptor>() 
       from attribute in prop.Attributes.OfType<ValidationAttribute>() 
       where !attribute.IsValid(prop.GetValue(instance)) 
       select new ErrorInfo(prop.Name, attribute.FormatErrorMessage(string.Empty), instance); 
    } 
} 

Vous pourriez avoir besoin d'améliorer cela, par exemple, si vous voulez [DataType (DataType.EmailAddress)] pour valider réellement adresses e-mail, ou si vous voulez pour supporter l'attribut [MetadataType].

13

Ceci est maintenant possible dans C# 4

var result = new List<ValidationResult>(); 
bool valid = Validator.TryValidateObject(Vehicle, new ValidationContext(Vehicle, null, null), result); 

Cela aussi vous donner les détails de la validation.

Questions connexes