说明
我正在尝试创建一个动态菜单,从数据库加载项目。 我需要菜单内最多有三个级别,像这样:
<ul>
<li>Home</li>
<li>Peoples
<ul>
<li>Employee
<ul>
<li>Create</li>
<li>List</li>
<li>Edit</li>
</ul>
</li>
<li>Training</li>
<li>Material Requisition</li>
</ul>
</li>
</ul
现在,这就是我今天的情况,但没有成功:
部分视图“TopBar.cshtml”在每个页面中显示,并且像这样在“_Layout.cshtml”中调用:
_Layout.cshtml
<body>
@Html.Partial("TopBar")
<div class="container body-content">
@RenderBody()
(...)
而“TopBar.cshtml”使用以下代码显示数据:
@model IEnumerable<SIGO.Models.TopMenu>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<div class="SigoLogo" onclick="location.href='@Url.Action("")'">
<a href="@Url.Action("Index", "Home")" title="Início">
<img src="~/Content/images/Wlogo.png" />
</a>
</div>
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"></button>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
@if (Model != null){
foreach(var item in Model.Where(p => p.Nivel == 0)) {
if (Model.Where(s1 => s1.Parent == item.TopMenuID) != null) {
<li>@item.Descricao
<ul>
@foreach (var sub1 in Model.Where(s1 => s1.Parent == item.TopMenuID)) {
if (Model.Where(s2 => s2.Parent == sub1.TopMenuID) != null) {
<li>@sub1.Descricao
<ul>
@foreach (var sub2 in Model.Where(s2 => s2.Parent == sub1.TopMenuID)) {
<li>@Html.ActionLink(sub2.Descricao,sub2.Action,sub2.Controller)</li>
}
</ul>
</li>
}else{
<li>@Html.ActionLink(sub1.Descricao,sub1.Action,sub1.Controller)</li>
}
}
</ul>
</li>
}else{
<li>@Html.ActionLink(item.Descricao,item.Action,item.Controller)</li>
}
}
}
</ul>
</div>
</div>
</div>
这是“TopMenu”类。
public class TopMenuItem {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; } //Iterator
public int Parent { get; set; } //TopMenuItem parent id
public bool Group { get; set; } //If this have another item below
public string Descricao { get; set; } //Text to show
public string Action { get; set; } //Action to Go
public string Controller { get; set; } //Controller to Go
}
所有这些都导致了空白列表,就像一个干净的数据库。 但是,当我调用一个名为List的操作时,会出现冲突,因为视图“ List.cshtml”和“ TopBar.cshtml”都以以下方式开头:
@model IEnumerable<SIGO.Models.Employee>
或者
@model IEnumerable<SIGO.Models.TopMenu>
P.S.: 我没有使用任何控制器来处理TopMenu中的数据。
问题
- 我应该如何实现这个TopMenu?
- 你有其他的解决方案吗?
谢谢!对于翻译中的任何错误表示抱歉。