在HttpPost请求后返回到最后一个ActionResult

本文关键字:最后一个 ActionResult 返回 HttpPost 请求 | 更新日期: 2023-09-27 18:16:56

我目前正在开发MVC c#应用程序,并有一个HttpPost ActionResult,它向用户添加了一个新角色。我想在整个申请过程中使用这个方法。

我遇到的问题是,一旦这个方法运行,我希望它返回到以前的ActionResult,因为我想重用这个方法,我不能将返回视图设置为集合视图。有没有办法设置返回到前一个视图?

多谢安德鲁

在HttpPost请求后返回到最后一个ActionResult

您可以在调用POST控制器动作时传递一个returnUrl:

[HttpPost]
public ActionResult Foo(string returnUrl)
{
    .... do something
    return Redirect(returnUrl);
}

这样,你可以从应用程序的不同部分POST到这个控制器动作,每次你都会提供一个返回url,你想在它完成处理后被重定向到。例如,默认模板中的LogOn操作就是这样工作的。你可以看一下。

默认返回与操作同名的视图,而不是表单是从哪个视图提交的。

如果你想返回一个特定的视图,那么你可以这样做:

return View("ViewName",Model);

如果你想返回提交表单的视图,你需要告诉这个动作来自哪里,这样你就可以在视图中设置的视图模型中添加一个属性。然后你可以这样写:

return View(ViewModel.ViewName,ViewModel);

从请求对象中挖掘viewname可能会做一些令人讨厌的事情,但这太可怕了,我甚至不打算告诉你从哪里开始。

可以创建一个使用cookie存储当前路由值的ActionFilter。它在OnActionExecuting中加载先前保存的cookie,并在OnActionExecuted中存储当前路由值。但是对于所有禁用cookie的用户来说,它都将失败。

你也可以使用HTTP报头Referrer。但它不是一直设置的。

换句话说,没有可靠的方法来实现你想要的(不使用Darin所描述的参数)。