【问题标题】:Returning to last ActionResult after HttpPost requestHttpPost 请求后返回上一个 ActionResult
【发布时间】:2011-12-07 10:35:16
【问题描述】:

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

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

非常感谢

安德鲁

【问题讨论】:

  • 您的问题没有多大意义,您所说的“以前的观点”或“以前的行动结果”是什么意思。一个方法(是否有一个 mvc 操作)没有内在的方式来了解在以前的调用期间发生的任何事情。如果你想保持某种状态,你必须使用静态属性或字段或类似会话变量的东西。
  • 我的意思是 HttpPost 来自时的视图。即,如果它来自名为 Home 的视图,它将重定向到该视图。如果它不知道之前发生了什么,我想我将不得不在 HttpPost 请求中传递此信息

标签: c# asp.net-mvc


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    return View("ViewName",Model);
    

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

    return View(ViewModel.ViewName,ViewModel);
    

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

    【讨论】:

      【解决方案3】:

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

      您也可以使用 HTTP 标头 Referrer。但它并不是一直设置的。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-15
        • 2020-04-25
        相关资源
        最近更新 更多