【发布时间】:2020-08-17 17:09:08
【问题描述】:
我想动态生成导航菜单,该菜单遵循我的应用程序的默认路由以及特定的操作和控制器。 我在 MVC5 中发现了它,但我不知道如何在 .Net Core MVC 应用程序中做同样的事情。
我在 MVC5 中的尝试如下:
查看模型:
public class MenuViewModel
{
// other props
public string Link
{
get
{
UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext);
return url.Action(this.Action != null ? this.Action : "StaticPage", this.Controller != null ? this.Controller : "StaticPage", new { pageName = this.PageTitle });
}
}
}
Global.asax:
public static List<MenuViewModel> SetMenuHeads()
{
return
General.DataModel.Menus
.Where(m => m.IsHead)
.Select(MenuViewModel.Set)
.ToList();
}
General.cs:
public static string SubMenuGenerator(MenuViewModel menu)
{
string subMenus = "";
var subMenusList =
DataModel.Menus
.Where(m => m.ParentId == menu.ID)
.Select(MenuViewModel.Set)
.ToList();
if (subMenusList.Count == 0)
subMenus += "<li><a href=\"" + menu.Link + "\" class=\"external\"><span>" + menu.RenderTitle + "</span></a></li>";
else
{
subMenus += "<li><a href=\"#\" class=\"external\"><span>" + menu.Title + "</span></a>";
subMenus += "<ul>";
foreach (var mnu in subMenusList)
{
subMenus += SubMenuGenerator(mnu);
}
subMenus += "</ul>";
subMenus += "</li>";
}
return subMenus;
}
_Layout.cshtml:
<nav id="main-nav">
<ul id="main-menu" class="sm-clean">
<li><a href="@Url.Action("Index", "Home")" class="external"><span>Home</span></a></li>
@{
string menu = "";
foreach (var menuItem in global_asax.SetMenuHeads())
{
menu += General.SubMenuGenerator(menuItem);
}
}
@Html.Raw(menu)
</ul>
</nav>
现在我想尝试在 .net 核心中做同样的事情,但在 .net 核心中没有像 HttpContext.Current.Request.RequestContext 这样的类来使用其操作和控制器创建一个 url。
有什么想法吗?
【问题讨论】:
-
您可以查看strathweb.com/2019/08/… 并根据您的需要进行调整。
标签: c# asp.net-core model-view-controller asp.net-core-mvc