在重定向之前设置Viewbag

时间:2013-01-24 09:18:23

标签: c# asp.net-mvc

在调用重定向之前是否可以设置ViewBag?

我想要像

这样的东西
@ViewBag.Message="MyMessage";
RedirectToAction("MyAction");

5 个答案:

答案 0 :(得分:220)

使用重定向时,不得使用ViewBag,而应使用TempData

public ActionResult Action1 () {
 TempData["shortMessage"] = "MyMessage";
 return RedirectToAction("Action2");
}

public ActionResult Action2 () {
 //now I can populate my ViewBag (if I want to) with the TempData["shortMessage"] content
  ViewBag.Message = TempData["shortMessage"].ToString();
  return View();
}

答案 1 :(得分:11)

在这种情况下,您可以使用TempData。 Here是对ViewBag,ViewData和TempData的一些解释。

答案 2 :(得分:8)

我确实喜欢这个..它为我工作...... 在这里我改变了密码并且在成功时我想将成功消息设置为viewbag以在视图上显示..

// Generate a value with an absolute time with an offset of 100ms multipled by value
var source = Rx.Observable.generateWithRelativeTime(
    1, // initial value
    function (x) { return x < 4; }, // stop predicate
    function (x) { return x + 1; }, // iterator
    function (x) { return x; }, // value selector
    function (x) { return 100 * x; } // time selector
).timeInterval();

答案 3 :(得分:3)

Taken from here

  

<强>摘要

     

ViewData和ViewBag对象为您提供了访问模型旁边的额外数据的方法,但是对于更复杂的数据,您可以升级到ViewModel。另一方面,TempData专门用于处理HTTP重定向上的数据,因此在使用TempData时请务必小心。

答案 4 :(得分:-2)

或者你可以使用Session替代:

Session["message"] = "MyMessage";
RedirectToAction("MyAction");

然后随时调用它。

<强>更新

另外,正如@James在评论中所说的那样,在你使用它之后取消或清除特定会话的价值是安全的,以避免不必要的垃圾数据或过时的价值。