[英]Loop Through Multi-Level Dynamic Menus in Asp.Net MVC
我試圖遍歷多級動態菜單。 我已經成功地手動執行了此操作,即,每次要顯示其父級的子Menus
時,我都必須手動循環。 我想知道最好的方法或通過這些動態菜單循環多級的替代方法 。
@{ var menusList = ViewBag.Menus as IEnumerable<ParentMenuViewModel>; }
@foreach (var parentMenu in menusList.Where(p => p.ParentId == 0))
{
<ul>
<li>
<h1>@parentMenu.Name</h1>
@if (menusList.Count(p => p.ParentId == parentMenu.MenuId) > 0)
{
<ul>
@foreach (var childMenu in menusList.Where(p => p.ParentId == parentMenu.MenuId))
{
<h2>@childMenu.Name</h2>
if (menusList.Count(p => p.ParentId == childMenu.MenuId) > 0)
{
foreach (var subChild in menusList.Where(p => p.ParentId == childMenu.MenuId))
{
<h3>@subChild.Name</h3>
}
}
}
</ul>
}
</li>
</ul>
}
更新:輸出看起來像這樣;
HOME
SUB MENU1
SUB SUB MENU1
SUB SUB MENU2
但是,我的數據庫中有這樣的內容:
HOME
SUB MENU1
SUB SUB MENU1
SUB SUB MENU2
Sub SUB SUB MENU1
Sub SUB SUB MENU2
這是我的模特;
您可以使用partialview,然后進行遞歸循環。 為此,您首先需要對模型進行一些更改:
視圖模型
// The ViewModel is now a hirearchical model, where each item has a list of children.
public class MenuViewModel
{
int MenuId {get; set;}
string Name {get; set;}
//other properties
** snip **
List<MenuViewModel> Children {get; set;}
}
調節器
將模型轉換為分層ViewModel:
public ActionResult Menus(){
List<Menu> menusource; // get your menus here
ViewBag.Menus = CreateVM(0, menusource); // transform it into the ViewModel
return View();
}
public IEnumerable<MenuViewModel> CreateVM(int parentid, List<Menu> source)
{
return from men in source
where men.ParentId = parentid
select new MenuViewModel(){
MenuId = men.MenuId,
Name = men.Name
// other properties
Children = CreateVM(men.MenuId, source)
};
}
視圖
@{
var menusList = ViewBag.Menus as IEnumerable<MenuViewModel>;
Html.RenderPartial("MenuPartial", menuslist);
}
MenuPartial
@model IEnumerable<MenuViewModel>
@foreach (var menuitem in model)
{
<ul>
<li>
<h1>@menuitem.Name</h1>
@{
Html.RenderPartial("MenuPartial", menuitem.Children);
}
</li>
</ul>
}
關於原始代碼,這里您唯一會缺少的是您沒有不同的Hx標簽,但是您可以通過創建另一個視圖模型並將其傳遞到當前級別來找到解決方法。
注意:我在SO編輯器中鍵入了所有這些代碼,因此可能會有一些小的語法錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.