在我的_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
有人有这个问题吗?或者也许知道问题根源在哪里?感谢所有帮助。
答案 0 :(得分:0)
事实证明,我必须改变ViewBag.SiteSession
设置的方式。
我的同事将代码放在_Layout.cshtml
中,代码应该在BaseController
中,并在OnAuthorization()
期间执行。
答案 1 :(得分:0)
ViewBag
是ViewData
对象(它只是一个字典)的动态包装器,用于在控制器及其视图之间传递数据。为此,它是一个神奇的工具,非常有用。 但是,您无法使用ViewBag
在多个ActionMethod之间传递数据。
要完成此操作,您必须使用存储在会话中的TempData
。
可以找到之前对类似问题的回答here。