Asp.net mvc 在OneException(ExceptionContext filterContext)内时,是否有任何方法可以恢复传递给POST操作的模型?

Asp.net mvc 在OneException(ExceptionContext filterContext)内时,是否有任何方法可以恢复传递给POST操作的模型?,asp.net-mvc,exception,model,action-filter,onexception,Asp.net Mvc,Exception,Model,Action Filter,Onexception,情况是: 我找不到获取传递给POST-action方法的viewModel的方法 [HttpPost] public ActionResult Edit(SomeCoolModel viewModel) { // Some Exception happens here during the action execution... } 在控制器的可重写OnException内: protected override void OnException(ExceptionContext fi

情况是:

我找不到获取传递给POST-action方法的
viewModel
的方法

[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
对象可用:(

我想返回与发布的
数据/视图模型相同的
视图
,返回给位于中心点的用户。希望你明白我的意思


是否有其他路径可以实现此目标?

您可以创建一个自定义模型绑定器,该绑定器继承并将模型分配给
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"];

    ...
}

我不完全确定你的意思,但是在
OnException()
方法中,你可以尝试类似
MyModel m=newmymodel();TryUpdateModel(m)的方法
为您提供模型,但您当然需要知道类型,所以不太清楚flexible@StephenMuecke很棒的开始…它用
ModelState
值填充了模型,但不好的部分是你提到的:它不是动态的\灵活的。我想给它添加一些
dynamic
。)如果我能做到这一点,它将允许我避免编写大量重复的代码。哇!工作得很漂亮<代码>ASP.NET MVC
非常好,您可以在很多地方插入它:关键是要知道在哪里插入。愿上帝保佑你的生命。:-)两年后,仍然是一个魅力!谢谢