我在基于角色的MVC razor中创建动态菜单,我从数据库中获取菜单项列表,然后将其保存在会话中,然后我创建了菜单的部分视图并在其中传递此会话。 它的工作正常,但我不知道在哪里创建这个菜单会话? 这是我的部分观点
<ul class="nav navbar-nav">
@foreach (var item in Model)
{
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">@item.GroupName<span class="caret"></span></a>
<ul class="dropdown-menu dropdown-submenu">
@foreach (var sub_item in item.ChildPages)
{
<li><a href="@sub_item.Url">@sub_item.DisplayName </a></li>
}
</ul>
</li>
}
</ul>
这是我如何获取菜单
var lst = MenuHelper.GetMenu("logged_in_user_Id");
Session["Menu"]=lst;
在我的布局页面上,我有这个
@Html.Partial("_Menu" , Session["Menu"] as List<Menu>);
我尝试在Global.asax Session_Start事件中添加获取代码的菜单,但我在布局页面上获取了Session [&#34; Menu&#34;] null。 用户登录后我应该在哪里创建菜单会话?
答案 0 :(得分:0)
Session_Start
,它与登录/注销过程无关。因此,您的Session["Menu"]
在登录后为null
,因为在您登录之前已经执行了Session_Start
。
您应该将该代码添加到Login-Action
。如果登录成功,请将菜单加载到会话。