Asp.net mvc 在OneException(ExceptionContext filterContext)内时,是否有任何方法可以恢复传递给POST操作的模型?
情况是: 我找不到获取传递给POST-action方法的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
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
非常好,您可以在很多地方插入它:关键是要知道在哪里插入。愿上帝保佑你的生命。:-)两年后,仍然是一个魅力!谢谢