Любой способ восстановить модель, переданную действию POST, когда внутри OnException(ExceptionContext filterContext)?
Ситуация такая:
Я не могу найти способ получить viewModel
это было передано методу действия POST.
[HttpPost]
public ActionResult Edit(SomeCoolModel viewModel)
{
// Some Exception happens here during the action execution...
}
Внутри непреодолимой OnException
для контроллера:
protected override void OnException(ExceptionContext filterContext)
{
...
filterContext.Result = new ViewResult
{
ViewName = filterContext.RouteData.Values["action"].ToString(),
TempData = filterContext.Controller.TempData,
ViewData = filterContext.Controller.ViewData
};
}
При отладке кода filterContext.Controller.ViewData
является null
поскольку исключение произошло во время выполнения кода, и не было возвращено никакого представления.
В любом случае я вижу, что filterContext.Controller.ViewData.ModelState
заполнен и имеет все значения, которые мне нужны, но у меня нет полного ViewData => viewModel
объект доступен.:(
Я хочу вернуть то же самое View
с опубликованным data/ViewModel
вернуться к пользователю в центральной точке. Надеюсь, вы поняли меня.
Есть ли какой-то другой путь, которым я могу следовать для достижения цели?
1 ответ
Вы можете создать пользовательский механизм связывания модели, который наследуется от DefaultModelBinder, и назначить модель TempData
:
public class MyCustomerBinder : DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
base.OnModelUpdated(controllerContext, bindingContext);
controllerContext.Controller.TempData["model"] = bindingContext.Model;
}
}
и зарегистрируйте его в Global.asax
:
ModelBinders.Binders.DefaultBinder = new MyCustomerBinder();
затем доступ к нему:
protected override void OnException(ExceptionContext filterContext)
{
var model = filterContext.Controller.TempData["model"];
...
}