Asp.net mvc 4 数据库中的动态菜单

Asp.net mvc 4 数据库中的动态菜单,asp.net-mvc-4,Asp.net Mvc 4,我有一个登录页面,用户登录时会进入主页,其中加载了动态菜单。问题是,当用户单击其中一个菜单链接时,加载的菜单不可见 这是因为我在主控制器的索引操作中编写了代码 因此,我的问题是,我应该在哪里编写动态菜单的逻辑,以便单击菜单链接即可访问它 \u Layout.cshtml文件,其中加载了菜单 @model SMS.Models.ViewModel.DashboardVM @if (Model != null && Model.MenuParentList.Count >

我有一个
登录页面
,用户登录时会进入
主页
,其中加载了
动态菜单
。问题是,当用户单击其中一个
菜单链接
时,
加载的菜单
不可见

这是因为我在
主控制器
索引操作
中编写了代码

因此,我的问题是,我应该在哪里编写动态菜单的
逻辑
,以便单击菜单链接即可访问它

\u Layout.cshtml文件,其中加载了菜单

 @model SMS.Models.ViewModel.DashboardVM

 @if (Model != null && Model.MenuParentList.Count > 0)
            {
                <!-- Sidebar Menu -->
                <ul class="sidebar-menu">
                    <li class="header">MAIN NAVIGATION</li>
                    <li class="active">
                        <a href="#">
                            <i class="fa fa-dashboard"></i> <span>Dashboard</span>
                        </a>
                    </li>
                    @foreach (var parentItem in Model.MenuParentList)
                    {
                        <li class="treeview">
                            <a href="#">
                                <i class="fa fa-th"></i>
                                <span>@parentItem.MenuParentName</span>
                                <i class="fa fa-angle-left pull-right"></i>
                            </a>
                            <ul class="treeview-menu">
                                @Html.Partial("_MenuParent", Model.MenuList.Where(x => x.ParentID == parentItem.MenuParentID))
                            </ul>
                        </li>
                    }                       

                </ul> 
            }      

创建一个单独的
[ChildActionOnly]
方法,生成菜单,并从布局页面调用它,使其在所有页面中都可用

[ChildActionOnly]
public ActionResult Menu()
{
  var model = new DashboardVM
  {
     ....
  }
  return PartialView("_Menu", model);
}
并创建
\u Menu.cshtml
局部视图以生成html

@model DashboardVM
....
然后在布局中,删除
@model SMS.Models.ViewModel.DashboardVM
(布局不应该有模型,除非该模型是布局使用的所有模型的基类),然后包括

@Html.Action("Menu", yourControllerName)

它将调用
菜单
方法,并将返回的部分视图插入布局。

感谢mate的大力支持。.我从另一个
堆栈溢出问题
中了解了有关
ChildAction
的更多信息。感谢
堆栈溢出
对我这样的新手的帮助。:)@ksg,没办法。但依我看,这是一个糟糕的解决方案。如果您必须使用会话,那么您应该始终在服务器上检查会话值是否存在,如果不存在,请再次从数据库中获取它。我同意您的观点,但是在会话得到timedout之前扩展会话有什么问题呢。最后,它为用户提供了一个良好的体验,而不必在每次会话到期时都进入登录页面……进入登录页面是什么意思。您不应将会话用于登录/身份验证信息。这应该在
表单验证
cookie中。请查看
@Html.Action("Menu", yourControllerName)