在我的控制器中说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
做了这个,但我们不想参加会议..
还有其他选择吗?
答案 0 :(得分:3)
回答第一个问题,ViewBag是一种更方便的ViewData形式,它使用动态对象而不是通用对象。与ViewData一样,ViewBag仅在单个请求的生命周期中存在,因此它仅在ActionMethod和它的视图之间可用。它不适用于不同的ActionMethods。
把它想象成家中的对讲系统。您可以将消息发送到家中的其他部分,但不能向邻居家发送消息。
您拥有的唯一选择是:
答案 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,并以某种方式复制会话为您做的一些事情。