نیاز به متد کمکی یا TreeViewHelper خاصی نیست
یه مثال ساده میتونیم این منوی داینامیک رو بسازیم
فرض کنیم مدل برنامه ما به صورت Selef Referencing باشه
public class Menu
{
public int Id { get; set; }
public string Title { get; set; }
[ForeignKey("ParentId")]
public Menu Parent { get; set; }
public int? ParentId { get; set; }
public ICollection<Menu> Childs { get; set; }
}
و این یک لیست از داده هست که درون دیتابیس ریختیم
var m1 = new Menu {Id=1, Title = "منوی اول" ,ParentId=null};
var m2 = new Menu {Id=2, Title = "زیر منوی1", ParentId = 1 };
var m3 = new Menu {Id=3, Title = "زیر منوی 2", ParentId = 1 };
var m11 = new Menu {Id=4, Title = "منوی دوم" , ParentId = null };
var m22 = new Menu {Id=5, Title = "زیر منوی 11", ParentId = 4 };
var m33 = new Menu {Id=6, Title = "زیر منوی 22", ParentId = 4 };
در قسمت کنترلر یک اکشن میسازیم
[ChildActionOnly]
public virtual ActionResult UserHorizontalNavBarItems()
{
var db= new dataContext()
var model=db.Menus.Include(x => x.Parent).ToList();
return PartialView("_HorizontalNavigation", model);
}
در پارشل مورد نظر که در اینجا HorizontalNavigation_ عنوانش هست کافیه یک سری کد بنویسیم
@model IEnumerable<Menu>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<ul class="nav navbar-nav">
@foreach (var parent in Model.Where(x => x.ParentId == null))
{
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">@parent.Title
<span class="caret"></span></a>
<ul class="dropdown-menu">
@foreach (var child in Model.Where(x => x.ParentId == parent.Id && x.ParentId != null))
{
<li class="nav-divider"></li>
<li>
<a href="#">در این قسمت اکشن لینک هاتون اضافه کنید
@*<i class="@child.Icon"></i>*@
<span>@child.Title</span>
</a>
</li>
}
</ul>
</li>
}
</ul>
</div>
</nav>
برای نمایش منو هم بدینصورت عمل میکنیم
@Html.Action("UserHorizontalNavBarItems", "Home" })
در صورتیکه نیاز به منوی های تو در توی زیادی باشه از TreeviewHelper هاییکه توی اینترنت فراوونه استفاده کنید