Я пытаюсь запросить атрибуты и получить доступ к базовому типу нескольких атрибутов. По какой-то причине он не работает правильно и не выполняется так, как ожидалось. Вот код ниже:
internal static void ValidateProperties(TModel model, ModelStateDictionary modelState)
{
Type type = model.GetType();
PropertyInfo[] properties = type.GetProperties();
foreach (PropertyInfo property in properties)
{
foreach(Attribute attribute in property.GetCustomAttributes(true))
{
ValidationAttribute validationAttribute = attribute as ValidationAttribute;
if (validationAttribute != null)
{
if (!validationAttribute.IsValid(property.GetValue(model, null)))
modelState.AddModelError(property.Name, validationAttribute.ErrorMessage);
}
}
}
}
По какой-то причине validateAttribute всегда имеет значение null. При отладке он не будет приводить CustomValidationAttribute или RequiredAttribute. Попытка прямого преобразования в ValidationAttribute вместо использования ключевого слова «as» также приводит к исключению Invalid Cast для обоих этих типов. Очевидно, что они получены из атрибута Validation: http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute.aspx
Чего мне не хватает? Спасибо!
Редактировать: для каждого запроса я добавил оператор Debug для вывода типа атрибута. Результаты следующие:
System.ComponentModel.DataAnnotations.CustomValidationAttribute
System.ComponentModel.DataAnnotations.RequiredAttribute
System.ComponentModel.DataAnnotations.RegularExpressionAttribute
System.ComponentModel.DataAnnotations.CustomValidationAttribute
System.ComponentModel.DataAnnotations.RequiredAttribute