I want to generate navigation menu dynamically which follows default routing of my application with specific actions and controllers. I figured it out in MVC5 but I don't know how to do same in .Net Core MVC application.
What I've tried in MVC5 is as below:
View Model :
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>
Now I want to try to do same in .net core but there is no class like HttpContext.Current.Request.RequestContext in .net core to make a url with its action and controller.
Any idea?
