【问题标题】:Pass information back to the view when using Redirect()使用 Redirect() 时将信息传递回视图
【发布时间】:2013-02-21 15:01:18
【问题描述】:

我从多个页面调用控制器并使用returnUrl 参数返回正确的调用位置:

public ActionResult EmailOrder(int id, string returnUrl)
{
    var message = "The order has been emailed";
    if (!string.IsNullOrEmpty(returnUrl)) return Redirect(returnUrl);
    return RedirectToAction("Details", new { id, message });
}

使用Redirect(url) 时如何将附加信息传递回视图?在上面的例子中,当returnUrl 有值时,我希望能够将message 传回。

【问题讨论】:

  • 你可以使用 ViewData["message"] = "你被重定向了。"
  • 这不起作用 - 它不会传递到重定向页面。

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 tempdata


【解决方案1】:

如果您正在重定向到另一个操作方法并且您想要传递可以在新操作方法中访问的数据,您应该使用 ASP.MVC 控制器的 TempData 属性。您可以按如下方式使用它:

[HttpPost]
public ActionResult MyActionMethod(Order order) 
{
    // write your logic here to save the Order
    TempData["message"] = "here is some message";
     return RedirectToAction("Index");
}

TempData 成员中的数据将通过重定向保留。它将在重定向页面中访问,然后将被删除。一旦您读取了 TempData 中的条目,它将被标记为删除。

public ActionResult RedirectedMethod() 
{
    //Retrieve data from TempData.  It will then be marked for deletion
    var data = TempData["message"].ToString();
}

如果你想获取一个值而不将其标记为删除,你可以使用“Peek”方法:

var data = TempData.Peek("message")

此外,您可以手动保留一个值,否则该值会使用“保留”方法删除:

TempData.Keep("message")

TempData 的类型为 TempDataDictionary

请注意,TempData 在后台使用 ASP.Net 会话状态,因此如果您使用的是 TempData,则必须打开会话状态。

有关 TempData 的更多信息,请参阅here

【讨论】:

  • 谢谢,太好了 - 很享受。 (还从您的链接中找到了一本有趣的 jquery 电子书 - 加分!!)
  • 哦,我现在在链接中看到了 jquery 电子书。我没有注意到这一点。我看起来很感兴趣...很高兴为您找到答案。
猜你喜欢
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 2013-04-12
相关资源
最近更新 更多