Есть готовая обертка над фреймворком валидации, которая адаптирует API этого фреймворка к механизму отображения ошибок ASP.NET MVC (ModelState
и т.п.). Как встроить эту систему в цикл обработки запроса? Желательно использовать ModelBinders
.
Как реализовать валидацию в ModelBinder (ASP.NET MVC)
2
Лучший ответ:
1
Нужно создать класс, унаследованный от DefaulModelBinder
и перекрыть метод OnModelUpdated
:
public class ValidationModelBinder : DefaultModelBinder
{
protected override void OnModelUpdated(
ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
// Получаем объект, который нужно валидировать
var objectToValidate = bindingContext.Model;
// Получаем объект ModelState для регистрации ошибок
var modelState = bindingContext.ModelState;
// ... код валидации ...
}
}
Следующим шагом нужно зарегистрировать этот binder
. В файле Global.asax.cs
в методе Application_Start
нужно добавить строку:
ModelBinders.Binders.Add(typeof(TypeToValidate), new ValidationModelBinder());
Теперь, если в каком-либо контроллере есть метод, принимающий объект типа TypeToValidate, то перед вызовом этого метода объект будет автоматически валидироваться.