Могу ли я вернуть результат действия из фильтра действий?

Обычно я проверяю свою модель в методе действия перед фиксацией данных в базе данных.

[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 часов ...

6
задан Adrian Grigore 14 May 2011 в 18:01
поделиться