Как вручную вызвать DataAnnotationsModelValidatorProvider (после его отключения)? - PullRequest
1 голос
/ 22 января 2012

Как вручную выполнить работу DataAnnotationsModelValidatorProvider после отключения автоматической проверки приложения в целом (а-ля https://stackoverflow.com/a/6111442/236255). Я спрашиваю, потому что

  1. Мне нравится, как он работает, и я хочу использовать его функциональность, но
  2. Мне обычно нужно проводить бизнес-валидацию, которая требует общения с базой данных в дополнение к обычной валидации на основе DataAnnotations. Я мог бы создать и утилизировать мой L2S DataContext в методе IValidatableObject.Validate, но это, кажется, идет вразрез с паттерном DI внедрения сервисов и контекстов данных в мои контроллеры (борясь с искушением моего функционального программиста писать свои сервисы как статические методы, которые сами создайте и утилизируйте контексты данных!).

Обратите внимание, что я не использую какие-либо функции проверки клиента MVC (я делаю все POST как ajax, поэтому я никогда не видел какого-либо реального преимущества для проверки на стороне клиента).

1 Ответ

0 голосов
/ 23 января 2012

Сначала проверьте,

var validation = new List<ValidationResult>();

bool valid = Validator.TryValidateObject(value, new ValidationContext(value, null, null), validation, validateAllProperties: true);

Затем скопируйте результаты в ModelState:

foreach (var item in validation) {
   IList<string> memberNames = item.MemberNames.ToArray();

   if (memberNames.Count > 0) {

      for (int i = 0; i < memberNames.Count; i++)
         controller.ModelState.AddModelError(memberNames[i] ?? "", item.ErrorMessage);

   } else {
      controller.ModelState.AddModelError("", item.ErrorMessage);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...