Проверка DataAnnotations из класса - PullRequest
4 голосов
/ 29 апреля 2010

Я использую DataAnnotations в проекте, который является чистым приложением C #, каков наилучший способ проверки моих моделей / документов по атрибутам DataAnnotations?

Ответы [ 2 ]

14 голосов
/ 22 августа 2011

Это теперь встроено в C # 4

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

Это также даст вам детали проверки.

6 голосов
/ 07 мая 2010

Не от меня, а от моего друга Стива Сандерсона:

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);
    }
}

Вам может потребоваться улучшить это, например, если вы хотите, чтобы [DataType (DataType.EmailAddress)] действительно проверял адреса электронной почты, или если вы хотите поддерживать атрибут [MetadataType].

...