Below are the info.
No idea how to loop the SubNav item in the View. (Ref: Loop Through Multi-Level Dynamic Menus in Asp.Net MVC)
Controller
[ChildActionOnly]
public PartialViewResult LoadNav()
{
var db = new NavDb();
List<Nav> NavCol = db.Navs.ToList<Nav>();
var navObj = CreateNavVM(0, NavCol);
return PartialView("_PVTopNav", navObj);
}
public IEnumerable<NavViewModel> CreateNavVM(int pParentId, List<Nav> pNavCol)
{
return from m in pNavCol
orderby m.DisplaySeq
where m.ParentMenuId == pParentId
select new NavViewModel()
{
MenuId = m.MenuId,
Name = m.Name,
HtmlTitle = m.HtmlTitle,
Url = m.Url,
DisplaySeq = m.DisplaySeq,
SubNav = (IEnumerator<NavViewModel>)CreateNavVM(m.MenuId, pNavCol)
};
}
ViewModel
public class NavViewModel
{
public int MenuId { get; set; }
public int ParentMenuId { get; set; }
public string Name { get; set; }
public string HtmlTitle { get; set; }
public string Url { get; set; }
public int DisplaySeq { get; set; }
public IEnumerator<NavViewModel> SubNav { get; set; }
}
Model
public class Nav
{
[Key]
public int MenuId { get; set; }
public int ParentMenuId { get; set; }
public string Name { get; set; }
public string HtmlTitle { get; set; }
public string Url { get; set; }
public int DisplaySeq { get; set; }
}
View
@model IEnumerable<yetpweb.ViewModels.NavViewModel>
@foreach (var m in Model) {
<div class="ui simple dropdown item">
@m.Name
<div class="menu">
<a class="item" href="#">Link Item</a>
<a class="item" href="#">Link Item</a>
<div class="item">
<i class="dropdown icon"></i>
Sub Menu
<div class="menu">
<a class="item" href="#">Link Item</a>
<a class="item" href="#">Link Item</a>
</div>
</div>
<a class="item" href="#">Link Item</a>
</div>
</div>
}