【问题标题】:RedirectToAction and pass a value?RedirectToAction 并传递一个值?
【发布时间】:2018-02-07 16:37:55
【问题描述】:

如果我有一个控制器动作来重定向到另一个动作,像这样:

public ActionResult Index()
{
    RedirectToAction("Redirected", "Auth", new { data = "test" });
}

public ActionResult Redirected(string data = "")
{
    return View();
}

URL 栏中将包含类似“Redirected?data=test”的内容,AFAIK 是正确的行为。有没有一种方法可以直接将变量传递给重定向的 ActionResult 而无需在客户端进行更改?
我想在不更改 URL 的情况下将“测试”直接传递给重定向的 ActionResult。我敢肯定有一种简单的方法可以做到这一点,但它正在逃避我。 我知道我可以在可以将变量传入和传出的函数之外创建一个静态变量,但这似乎不是一个合适的解决方案。

【问题讨论】:

标签: c# asp.net-mvc asp.net-core-mvc-2.0


【解决方案1】:

您可以使用TempData 变量。

public ActionResult Index()
{
    TempData["AfterRedirectVar"] = "Something";
    RedirectToAction("Redirected", "Auth", new { data = "test" });
}

public ActionResult Redirected(string data = "")
{
   string tempVar = TempData["AfterRedirectVar"] as string;
   return View();
}

This link 可能会有所帮助。

【讨论】:

  • @R.StackUser,我看到了你删除的评论 :) 你也可以使用服务器缓存。谷歌它“服务器缓存 ASP.NET MVC”。祝你好运。
【解决方案2】:

是的,使用TempData

public ActionResult Index()
{
  TempData["data"] = "test";
  RedirectToAction("Redirected", "Auth"});
}

public ActionResult Redirected()
{
  var data = TempData["data"].ToString();
  return View();
}

【讨论】:

    【解决方案3】:

    我希望这可以帮助你: https://stackoverflow.com/a/11209320/7424707

    在我看来,TempData 并不是最合适的解决方案。如果我是你,我会寻找其他解决方案。

    否则,您真的需要调用 RedirectToAction(从另一个控制器调用动作)吗?或者您的操作是否在同一个控制器中?

    【讨论】:

    • 如果满足某个条件,我需要返回一个由不同的ActionResult 生成的视图,并带有发送到该ActionResult 的特定参数。我希望不需要 cookie/TempData,但如果没有更好的选择,我可能不得不使用它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2010-12-29
    • 2017-05-20
    • 2014-04-05
    • 2010-10-18
    • 1970-01-01
    • 2020-03-30
    相关资源
    最近更新 更多