ASP.NET MVC5动态子菜单,包含从DB生成的链接

时间:2015-05-27 15:25:46

标签: asp.net-mvc asp.net-mvc-5 submenu

我需要有一个名为' Executives'的部分的子菜单(执行部分)。当用户单击主菜单中的“管理员”时,此菜单必须显示,并且只要单击“管理员”的任何子菜单链接,该菜单就会保留。 Catch是:子菜单链接是动态的,来自DB / CMS系统,因此它不是硬编码列表。这是我的悲哀开始的地方。 目前,我在PartialView中有它需要一个IEnumerable模型,所以它可以动态构建。 但是我如何在需要的时候开始做这项工作在我的脑海中有点扭曲。

@using xxx.Models
@model IEnumerable<xxx.Models.ExecutiveSection>
<ul class="nav navbar-nav">
@foreach (ExecutiveSection es in Model)
{
    <li>@Html.ActionLink(es.SectionName, "Section", "Executive", new { id = es.ExecutiveSectionId })</li>
}

1 个答案:

答案 0 :(得分:0)

我解决了。 这是在_Layout

中做到的
 @{ // Sub-Menu for Executive Sections
            if (HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString().Contains("Executive"))
            {
                Html.RenderAction("ExecutiveSubMenu", "Executive");
            }
        }   

在控制器中:

public ActionResult ExecutiveSubMenu()
    {
        // get sections
        var sections = db.ExecutiveSections.ToList();
        return PartialView("ExecutiveSubMenuView", sections);
    }

最后是Partial:

@using xxx.Models
@model IEnumerable<xxx.Models.ExecutiveSection>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
    @foreach (ExecutiveSection es in Model)
    {
        <li>@Html.ActionLink(es.SectionName, "Section", "Executive", new { id = es.SectionName.Replace(" ", "-") }, null)</li>
    }
</ul>

(我'用'破折号'替换'任何部分名称中的空格' - '然后再换回SEO友好。)