数据库中的动态菜单

时间:2015-11-05 10:58:08

标签: asp.net-mvc-4

我有Login page登录时,用户需要Home Page加载dynamic menu。问题是当用户点击其中一个menulinkloaded menu不可见

这是因为我在Index action的{​​{1}}内编写了代码。

所以我的问题是我应该在哪里写Home controller,以便点击menulink时可以访问它。

_Layout.cshtml文件,其中加载了菜单

logic for dynamic menu

动态菜单的逻辑在这里

 @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> 
            }      

1 个答案:

答案 0 :(得分:3)

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

[ChildActionOnly]
public ActionResult Menu()
{
  var model = new DashboardVM
  {
     ....
  }
  return PartialView("_Menu", model);
}

并创建一个_Menu.cshtml局部视图以生成html

@model DashboardVM
....

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

@Html.Action("Menu", yourControllerName)

将调用Menu方法并将其返回的局部视图插入布局。