【发布时间】:2016-05-21 11:02:28
【问题描述】:
我在 mvc 中创建了多级菜单。它有效,但我想无限计算级别。现在有 4 个级别,所以将来如果有人想在数据库中添加 5 个级别,它不会显示在我的菜单中。我需要添加另一个 foreach 循环来显示 5. 级别。那么我怎样才能让我的菜单无限级别呢?
这是我的菜单视图。
@{
var myMenu = @Model;
var navbarmenu = myMenu.Where(x => x.ParentID == null);
var i = 0;
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class=" nav navbar-nav">
@foreach (var menuLevel1 in navbarmenu)
{
<li class="dropdown">
<a href="~/ADDS/Default.aspx" style="font-size:16px;">
@menuLevel1.MenuName
@if (menuLevel1.MenuName != "Home")
{
<span class="caret"></span>
}
</a>
@{ var navbarsubmenu = myMenu.Where(x => x.ParentID == menuLevel1.MenuID);}
@if (navbarsubmenu.IsAny())
{
<ul class="dropdown-menu">
@foreach (var menuLevel2 in navbarsubmenu)
{
<li class="dropdown-submenu">
@if (!string.IsNullOrEmpty(menuLevel2.MenuLink))
{
<a href="@Url.Content(menuLevel2.MenuLink)">
@menuLevel2.MenuName
</a>
}
else
{
<a href="~/ADDS/Default.aspx">
@menuLevel2.MenuName
</a>
}
@{var navbarsubmenu2 = myMenu.Where(x => x.ParentID == menuLevel2.MenuID);}
@if (navbarsubmenu2.IsAny())
{
<ul class="dropdown-menu">
@foreach (var menuLevel3 in navbarsubmenu2)
{
<li class="dropdown-submenu">
@if (!string.IsNullOrEmpty(menuLevel3.MenuLink))
{
<a href="@Url.Content(menuLevel3.MenuLink)">
@menuLevel3.MenuName
</a>
}
else
{
<a href="~/ADDS/Default.aspx">
@menuLevel3.MenuName
</a>
}
@{var navbarsubmenu3 = myMenu.Where(x => x.ParentID == menuLevel3.MenuID);}
@if (navbarsubmenu3.IsAny())
{
<ul class="dropdown-menu">
@foreach (var menuLevel4 in navbarsubmenu3)
{
<li class="dropdown-submenu">
@if (!string.IsNullOrEmpty(menuLevel4.MenuLink))
{
<a href="@Url.Content(menuLevel4.MenuLink)">
@menuLevel4.MenuName
</a>
}
else
{
<a href="~/ADDS/Default.aspx">
@menuLevel4.MenuName
</a>
}
</li>
}
</ul>
}
</li>
}
</ul>
}
</li>
}
</ul>
}
</li>
}
</ul>
</div>
</div>
</nav>
}
【问题讨论】:
-
使用分层模型和递归函数 - 有关使用 HtmlHelper 扩展方法的示例,请参阅 this answer
标签: c# html asp.net-mvc linq submenu