Asp.net mvc 某些ViewBag数据可在_Layout.cshtml中访问,但不在视图中?
在我的Asp.net mvc 某些ViewBag数据可在_Layout.cshtml中访问,但不在视图中?,asp.net-mvc,razor,viewbag,Asp.net Mvc,Razor,Viewbag,在我的\u Layout.cshtml中,我将一些会话数据存储在视图包中,如下所示: if (Session["SiteSession"] != null) { SiteSession siteSession = (SiteSession)Session["SiteSession"]; ViewBag.SiteSession = siteSession; } 到目前为止,它一直工作得很好 直到现在。我有一个视图,它基于ViewBag.SiteSession.IsAdmin,显示
\u Layout.cshtml
中,我将一些会话数据存储在视图包中,如下所示:
if (Session["SiteSession"] != null)
{
SiteSession siteSession = (SiteSession)Session["SiteSession"];
ViewBag.SiteSession = siteSession;
}
到目前为止,它一直工作得很好
直到现在。我有一个视图,它基于ViewBag.SiteSession.IsAdmin
,显示一些数据并向管理员打开某些控件,由于某些原因,该值不可访问(或根据intellisense,为null
):
RuntimeBinderException:无法对空引用执行运行时绑定
有人有这个问题吗?或者也许知道问题的根源在哪里?非常感谢您的帮助。事实证明,我必须更改ViewBag.SiteSession开始时设置的方式
我的同事将该代码放在\u Layout.cshtml
中,此时该代码本应位于我们的BaseController
中,并在OnAuthorization()期间执行。
ViewBag
是ViewData
对象(它只是一个字典)的动态包装器,用于在控制器及其视图之间进行数据通信。为此,它是一个极好的工具,非常有用但是,您不能使用ViewBag
在多个ActionMethods之间传递数据。
要完成此操作,必须使用存储在会话中的TempData
可以找到类似问题的先前答案。尝试((SiteSession)ViewBag.SiteSession)。我无意中发现,有人发布了该答案,然后将其删除。这对这个问题既不起作用也没有意义。是的,你在我写的时候发的。很高兴你明白了。