C# 返回操作不';不要更改URL
我正在寻找一种通过POST重定向的方法,我发现的解决方案建议只使用我想要的操作名称并填充参数。所有这些都在同一个控制器中(我们称之为Home)C# 返回操作不';不要更改URL,c#,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我正在寻找一种通过POST重定向的方法,我发现的解决方案建议只使用我想要的操作名称并填充参数。所有这些都在同一个控制器中(我们称之为Home) 所以这很有用,只是当你看url时,它不显示/Home/Foo,而是显示/Home/Zoro。我可以在不使用RedirectToAction的情况下修复此问题吗?如果我使用它,我会得到这个:Home/Foo?Name=bar&Age=123,这是我不想要的。而不是直接调用Foo()使用RedirectToAction() 您这样做会调用服务器上的操作,但实
所以这很有用,只是当你看url时,它不显示/Home/Foo,而是显示/Home/Zoro。我可以在不使用RedirectToAction的情况下修复此问题吗?如果我使用它,我会得到这个:Home/Foo?Name=bar&Age=123,这是我不想要的。而不是直接调用
Foo()
使用RedirectToAction()
您这样做会调用服务器上的操作,但实际上不会重定向,如果您希望更改url,则必须重定向到该操作:
return RedirectToAction("Foo", new {Name = "bar", Age = 123});
更新:
正如注释中提到的如何临时保存数据一样,您可以使用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
action using it您能提供一个带有重定向操作但以某种方式存储数据的解决方案吗?这是我唯一能想象的。更新你的答案,我会接受的。你可以使用TempData
来更新答案purpose@MrJinPengyou-您当前的Foo操作方法用[HttpPost]
修饰。不能从控制器内重定向到另一个POST方法。如果没有接受[HttpGet]
的Foo操作方法,则此操作将失败,因为没有匹配的操作方法。
public ActionResult SomeAction()
{
string Name = TempData["Name"] as string;
int Age - TempData["Age"] as int;
return View();
}