Обычно я проверяю свою модель в методе действия перед передачей данных в базу данных.
[HttpPost]
public ActionResult MyActionMethod(MyModelType model){
if (ModelState.IsValid){
//commit changes to database...
return View("SuccessView",model);
}
return View(model);
}
Но в некоторых очень редких случаях мне нужно провести дополнительную проверку на бизнес-уровне во время фиксации модели. Если возникает ошибка проверки, я хотел бы вызвать исключение на бизнес-уровне и использовать это исключение для возврата представления с ошибками проверки.
Я ищу способ реализовать это без изменения какого-либо кода в моем контроллере. Поэтому я ищу способ избежать чего-то такого:
[HttpPost]
public ActionResult MyActionMethod(MyModelType model){
if (ModelState.IsValid){
try {
//commit changes to database...
} catch (ValidationException e){
ModelState.AddModelError(...);
return View(model);
}
return View("SuccessView",model);
}
return View(model);
}
Есть ли способ сделать это?
Я думал о фильтре действий, который перехватывает ValidationExceptions и возвращает подходящее представление с ошибками проверки до того, как включится обычный фильтр [HandleError]
. Возможно ли что-то подобное?
Редактировать: Я только что нашел решение (см. Ниже), но я не смогу пометить это как правильный ответ, пока не пройдет 48 часов ...