ASP.NET 带有从数据库生成的链接的 MVC5 动态子菜单
ASP.NET MVC5 dynamic submenu with links generated from DB
我需要一个名为 'Executives' 的部分的子菜单(执行部分)。当用户单击主菜单中的行政人员时,此菜单必须显示,并且只要单击行政人员的任何子菜单 link 就会一直存在。
问题是:子菜单 link 是动态的,来自 DB/CMS 系统,因此它不是硬编码列表。这就是我的祸患开始的地方。
目前,我将它放在需要 IEnumerable 模型的 PartialView 中,以便它可以动态构建。
但是,我如何根据需要进行这项工作的方式在我的脑海中有点扭曲。
@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>
}
我解决了。
在 _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);
}
最后是部分:
@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>
(我 'replace' 任何部分名称中的空格都带有破折号“-”,然后为了 SEO 友好性再次返回。)
我需要一个名为 'Executives' 的部分的子菜单(执行部分)。当用户单击主菜单中的行政人员时,此菜单必须显示,并且只要单击行政人员的任何子菜单 link 就会一直存在。 问题是:子菜单 link 是动态的,来自 DB/CMS 系统,因此它不是硬编码列表。这就是我的祸患开始的地方。 目前,我将它放在需要 IEnumerable 模型的 PartialView 中,以便它可以动态构建。 但是,我如何根据需要进行这项工作的方式在我的脑海中有点扭曲。
@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>
}
我解决了。 在 _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);
}
最后是部分:
@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>
(我 'replace' 任何部分名称中的空格都带有破折号“-”,然后为了 SEO 友好性再次返回。)