ViewBag Usage-ASP.NET MVC3

时间:2011-11-03 09:53:32

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

在我的控制器中说ControllerFirst我在下面一行设置ViewBag属性。

ViewBag.PreviousPage="ThisIsComingFromControllerFirst";
return RedirectToAction("ControllerSecond", "Home");

现在从这里开始:

public ActionResult ControllerSecond()
{
    return View();
}

我正试图通过以下

Viewbag中使用ControllerSecond

查看:ControllerSecond.cshtml

@if(ViewBag.PreviouPage == "SomeValue")
{
  //do this
}

ViewBag.PreviousPage值为空。

请让我知道为什么它为null,我该如何从ControllerFirst获取我的视图中的值。

我使用Session做了这个,但我们不想参加会议..

还有其他选择吗?

4 个答案:

答案 0 :(得分:3)

回答第一个问题,ViewBag是一种更方便的ViewData形式,它使用动态对象而不是通用对象。与ViewData一样,ViewBag仅在单个请求的生命周期中存在,因此它仅在ActionMethod和它的视图之间可用。它不适用于不同的ActionMethods。

把它想象成家中的对讲系统。您可以将消息发送到家中的其他部分,但不能向邻居家发送消息。

您拥有的唯一选择是:

  • 使用会话
  • 使用TempData(也使用会话)
  • 使用Cookie
  • 使用查询字符串参数
  • 在数据库中使用中间表
  • 发布到ActionMethod

答案 1 :(得分:1)

ViewBag(和ViewData)是用于访问控制器和视图之间的额外数据(即数据模型之外)的对象。

如果您的数据必须在两个后续请求之间保留,则可以使用TempData

但是,TempData默认为stored in the session。 因此,如果您不想使用会话,您可以使用cookie,并以某种方式复制会话为您做的一些事情,如MikeSW suggested

When to use ViewBag, ViewData, or TempData in ASP.NET MVC 3 applications

答案 2 :(得分:0)

使用TempData而不是ViewBag

答案 3 :(得分:0)

您可以使用cookie,并以某种方式复制会话为您做的一些事情。