某些ViewBag数据可以在_Layout.cshtml中访问,但不能在View中访问?

时间:2013-07-02 19:09:29

标签: asp.net-mvc razor viewbag

在我的_Layout.cshtml中,我将一些会话数据存储在ViewBag中,如下所示:

if (Session["SiteSession"] != null)
{
    SiteSession siteSession = (SiteSession)Session["SiteSession"];
    ViewBag.SiteSession = siteSession;
}
到目前为止,它一直很好用。

直到现在。我有一个显示某些数据的视图,并根据ViewBag.SiteSession.IsAdmin向管理员打开某些控件,并且出于某种原因,该值无法访问(或null,根据智能感知):

RuntimeBinderException: Cannot perform runtime binding on null reference

有人有这个问题吗?或者也许知道问题根源在哪里?感谢所有帮助。

2 个答案:

答案 0 :(得分:0)

事实证明,我必须改变ViewBag.SiteSession设置的方式。

我的同事将代码放在_Layout.cshtml中,代码应该在BaseController中,并在OnAuthorization()期间执行。

答案 1 :(得分:0)

ViewBagViewData对象(它只是一个字典)的动态包装器,用于在控制器及其视图之间传递数据。为此,它是一个神奇的工具,非常有用。 但是,您无法使用ViewBag在多个ActionMethod之间传递数据。

要完成此操作,您必须使用存储在会话中的TempData

可以找到之前对类似问题的回答here