MVC中的动态菜单

时间:2016-07-21 13:01:55

标签: asp.net-mvc asp.net-mvc-4 razor

我在基于角色的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。 用户登录后我应该在哪里创建菜单会话?

1 个答案:

答案 0 :(得分:0)

只要用户是您的应用程序的新用户,就会触发

Session_Start,它与登录/注销过程无关。因此,您的Session["Menu"]在登录后为null,因为在您登录之前已经执行了Session_Start

您应该将该代码添加到Login-Action。如果登录成功,请将菜单加载到会话。