【问题标题】:Return action doesn't change URL返回操作不会更改 URL
【发布时间】:2014-09-18 15:56:31
【问题描述】:

我正在寻找一种使用 POST 进行重定向的方法,我发现的解决方案建议只需使用我想要的操作名称并填写参数即可。所有这些都在同一个控制器中(我们称之为 Home)

[HttpPost]
public ActionResult Zoro(NameOfMyModel model, string stringName)
{
  //Do whatever needs to be done
  return Foo("bar",123);
}

[HttpPost]
public ActionResult Foo(string Name, int Age)
{
    //Code here that use the params
    return View();
}

这很好用,只是当您查看 url 时,它不显示 /Home/Foo,而是显示 /Home/Zoro。我可以在不使用 RedirectToAction 的情况下解决此问题吗?如果我使用它,我会得到:Home/Foo?Name=bar&Age=123 我不想要。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


    【解决方案1】:

    不要直接调用Foo(),而是使用RedirectToAction()this overload

    您在服务器上调用操作但实际上不重定向的方式,如果您希望更改 url,您必须重定向到操作:

    return RedirectToAction("Foo", new {Name = "bar", Age = 123});
    

    更新:

    正如 cmets 中提到的如何临时保留数据,您可以使用TempData[]

    TempData["Name"] = bar";
    TempData["Age"] = 123;
    
    return RedirectToAction("SomeAction");
    

    在该操作中,您可以从 TempData 获取它:

    public ActionResult SomeAction()
    {
    
    string Name = TempData["Name"] as string;
    int Age - TempData["Age"] as int;
    
    return View();
    
    }
    

    注意:

    请注意,RedirectToAction() 仅适用于 HttpGet 的操作,不适用于 HttpPost 的操作。

    【讨论】:

    • 查看编辑以了解为什么我不想使用 RedirectToAction
    • 如果你想更新 url,你必须使用 RedirectToAction() 恐怕你不能调用 HttpPost 操作使用它
    • 您能否提供一个使用 RedirecToAction 但以某种方式存储数据的解决方案?这是我唯一能想象的。更新你的答案,我会接受的。
    • 你可以使用TempData来达到这个目的
    • @MrJinPengyou - 你当前的 Foo 动作方法用[HttpPost] 装饰。您不能从控制器内重定向到另一个 POST 方法。如果您没有可以接受[HttpGet] 的 Foo 操作方法,那么这将失败,因为没有操作方法匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-29
    • 2012-06-03
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    相关资源
    最近更新 更多