Поддержка программной регистрации MVC Model Validation - PullRequest
3 голосов
/ 15 января 2010

Сегодня (15 января 2010 г.) Скотт написал в блоге о проверке модели ASP.NET MVC2

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

Кто-нибудь знает, как можно программно добавлять правила проверки во время выполнения?

«Программная регистрация» - аналогичная функциональность, поддерживаемая ValidationAspects

// register lambda syntax validation functions
typeof(User).GetProperty("Name").AddValidation<string>((name, context) => 
  { if (!Exists(name)) { throw new ValidationException("Username is unknown"); } } );

// register validation factories (classes)
typeof(User).GetProperty("Name").AddValidation(new [] { new NotNullOrEmpty()} );

// don't like strings?
TypeOf<User>.Property(user => user.Name).AddValidation(new [] { new NotNullOrEmpty()} );

Ответы [ 2 ]

1 голос
/ 17 января 2010

Для предоставления пользовательских метаданных вам нужно реализовать абстрактный класс ModelMetadataProvider и зарегистрировать его в вашем global.asax:

           ModelMetadataProviders.Current = new ConventionMetadataProvider();

Это не добавляет атрибуты проверки во время выполнения. Вы просто предоставляете ВСЕ данные проверки в классы ModelMetadata, которые затем читаются битами HTML.EditorFor.

0 голосов
/ 04 мая 2012

Атрибуты создаются во время компиляции, а не во время выполнения. Они не могут быть изменены после компиляции.

Однако существует несколько вариантов проверки во время выполнения. Мой любимый Свободная проверка . Вы создаете проверочные классы, которые выполняются во время выполнения. Однако вы более или менее ограничены только статическими данными и данными из модели.

...