gpt4 book ai didi

asp.net-mvc - 在 OnException(ExceptionContext filterContext) 内部时,有什么方法可以恢复传递给 POST 操作的模型吗?

转载 作者:行者123 更新时间:2023-12-01 17:26:00 27 4
gpt4 key购买 nike

情况是这样的:

我找不到获取传递给 POST 操作方法的 viewModel 的方法。

[HttpPost]
public ActionResult Edit(SomeCoolModel viewModel)
{
// Some Exception happens here during the action execution...
}

Controller 的可重写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.ViewDatanull,因为代码执行时发生异常并且没有返回 View 。

无论如何,我看到 filterContext.Controller.ViewData.ModelState 已填充并具有我需要的所有值,但我没有完整的 ViewData => viewModel对象可用。 :(

我想将带有发布的data/ViewModel的相同View返回给中心点的用户。希望你明白我的意思。

我还可以遵循其他途径来实现目标吗?

最佳答案

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

...
}

关于asp.net-mvc - 在 OnException(ExceptionContext filterContext) 内部时,有什么方法可以恢复传递给 POST 操作的模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25213998/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com