gpt4 book ai didi

c# - C# ASP.Net MVC3 Razor 中的动态菜单

转载 作者:太空狗 更新时间:2023-10-29 22:32:07 25 4
gpt4 key购买 nike

解释

我正在尝试做一个动态菜单,从数据库中加载项目。我最多需要 3 个菜单级别,如下所示:

<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

现在,这就是我今天的做法,但没有成功:

局部 View “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
}

所有这些都会导致空白列表,就像一个干净的数据库。但是,当我调用一个 Action 列表时,例如发生冲突,因为展台 View (“List.cshtml”和“TopBar.cshtml”)以:

@model IEnumerable<SIGO.Models.Employee>

@model IEnumerable<SIGO.Models.TopMenu>

P.S.:我没有使用任何 Controller 来处理 TopMenu 的数据。

问题

  • 我该怎么做 TopMenu?
  • 您有其他解决方案吗?

谢谢!翻译有误请见谅

最佳答案

这是根据上述答案得出的解决方案

谢谢大家

类:TopMenu.cs

    public class TopMenu {
[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
}

上下文:SigoContext.cs

    public class SigoContext : DbContext {
public SigoContext() : base("SigoMain") {}
public DbSet<TopMenu> TopMenu{ get; set; }
}
}

Controller :SigoController.cs

    public class SystemController : Controller {
private SigoContext db = new SigoContext();

[ChildActionOnly]
public ActionResult TopMenu() {
return PartialView("TopBar",db.TopMenu);
}
}

布局:_Layout.cshtml

...
<body>
@{Html.RenderAction("TopMenu", "System");}
<div class="container body-content">
@RenderBody()
...

局部 View :TopMenu.cshtml

@model IEnumerable<SIGO.Models.TopMenu>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<div class="SigoLogo">
<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.Parent == 0)) {
if (Model.Where(s1 => s1.Parent == item.Id) != null) {
<li>@item.Descricao
<ul>
@foreach (var sub1 in Model.Where(s1 => s1.Parent == item.Id)) {
if (Model.Where(s2 => s2.Parent == sub1.Id) != null) {
<li>@sub1.Descricao
<ul>
@foreach (var sub2 in Model.Where(s2 => s2.Parent == sub1.Id)) {
<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>

谢谢大家!

关于c# - C# ASP.Net MVC3 Razor 中的动态菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24922781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com