在HttpPost请求之后返回上一个ActionResult

时间:2011-12-07 10:35:17

标签: c# asp.net-mvc

我目前正在开发一个MVC C#应用程序并拥有一个HttpPost ActionResult,它为用户添加了一个新角色。我希望在整个应用程序中使用此方法。

我遇到的问题是,一旦此方法运行,我希望它返回到之前的ActionResult,因为我想重用此方法,我无法将返回视图设置为set视图。有没有办法将返回设置为上一个视图?

非常感谢

安德鲁

3 个答案:

答案 0 :(得分:3)

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

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

通过这种方式,您可以从应用程序的不同部分对此控制器操作进行POST操作,并且每次您提供要在完成处理后重定向到的返回URL。例如,默认模板中的LogOn操作如何工作。你可以看看它。

答案 1 :(得分:1)

默认情况下,它会返回与操作同名的视图,而不是表单提交的视图。

如果您想要返回特定视图,则可以执行以下操作:

return View("ViewName",Model);

如果要返回提交表单的视图,则需要告诉它所来自的操作,因此您可以向视图中设置的viewmodel添加属性。然后你可以这样做:

return View(ViewModel.ViewName,ViewModel);

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

答案 2 :(得分:0)

您可以创建ActionFilter,使用Cookie存储当前路线值。它会在OnActionExecuting中加载以前保存的Cookie,并将当前路由valeus存储在OnActionExecuted中。但是对于已禁用cookie的每个人来说都会失败。

您还可以使用HTTP标头Referrer。但它并不是一直都在设定。

换句话说,没有可靠的方法来实现你想要的(不使用Darin所描述的参数)。至少不是一种值得麻烦的方式。