Нам необходимо в рамках нашей логики перебирать свойства модели для автоматического связывания свойств, и мы хотим расширить функциональность, включив новые аннотации данных в C # 4.0.
На данный моментЯ в основном перебираю каждую загрузку свойства во всех экземплярах ValidationAttribute и пытаюсь проверить с помощью функции Validate / IsValid, но мне кажется, что это не работает.
В качестве примера у меня есть такая модель:
public class HobbyModel
{
[Required(AllowEmptyStrings = false, ErrorMessage = "Do not allow empty strings")]
[DisplayName("Hobby")]
[DataType(DataType.Text)]
public string Hobby
{
get;
set;
}
}
И код для проверки атрибутов:
object[] attributes = propertyInfo.GetCustomAttributes(true);
TypeConverter typeConverter =
TypeDescriptor.GetConverter(typeof(ValidationAttribute));
bool isValid = false;
foreach (object attr in attributes)
{
ValidationAttribute attrib = attr as ValidationAttribute;
if (attrib != null)
{
attrib.Validate(obj, propertyInfo.Name);
}
}
Я отладил код, и модель имеет 3 атрибута, 2 из которых получены из ValidationAttribute, нокогда код проходит через функцию Validate (с пустым или нулевым значением), он генерирует исключение, как и ожидалось.
Я ожидаю, что делаю что-то глупое, поэтому мне интересно, использовал ли кто-нибудь эту функциюи может помочь.
Заранее спасибо, Джейми