در این مقاله طریقه ایجاد یک TreeView را در ASP.NET MVC مورد بررسی قرار خواهیم داد. برای Generate کردن یک TreeView از دیتابیس، قاعدتا به دیتابیس در درجه اول نیاز دارم. بافت دیتابیس به شکل زیر خواهد بود.
بسمه تعالی
پیاده سازی TreeView در ASP.NET MVC 5
در این مقاله طریقه ایجاد یک TreeView را در ASP.NET MVC مورد بررسی قرار خواهیم داد. برای Generate کردن یک TreeView از دیتابیس، قاعدتا به دیتابیس در درجه اول نیاز دارم. بافت دیتابیس به شکل زیر خواهد بود.
جدول SiteMenu دارای فیلدهای زیر خواهد بود.
MenuID
MenuName
NavURL
ParentMenuID
به دلیل Parent/Child بودن TreeView به یک ParentID جهت مشخص شدن پدر هر آیتم نیاز داریم. وضعیت Controller و ActionMethod مورد نیاز هم بسیار ساده و بدیهی خواهد بود.
- public ActionResult Simple()
- {
- List<SiteMenu> all = new List<SiteMenu>();
- using (MyDatabaseEntities dc = new MyDatabaseEntities())
- {
- all = dc.SiteMenus.OrderBy(a => a.ParentMenuID).ToList();
- }
- return View(all);
- }
حال به سراغ View خواهیم رفت.
بخشی از View که CSS است که نه امکان آموزش در آن وجود دارد و نه شما در پروژه های خود نیاز به ایجاد وضعیت مشابه خواهید داشت و همه چیز به طراحی شما بستگی دارد. برای ایجاد وضعیت Click به یک Event در JQuery نیاز داریم که مشابه زیر خواهد بود.
- @* Here We need some Jquery code for make this treeview collapsible *@
- @section Scripts{
- <script>
- $(document).ready(function () {
- $(".treeview li>ul").css('display', 'none');
- $(".collapsible").click(function (e) {
- e.preventDefault();
- $(this).toggleClass("collapse expand");
- $(this).closest('li').children('ul').slideToggle();
- });
- });
- </script>
- }
نکته اصلی ایجاد یک Inline HtmlHelper آن هم به صورت Recursive و استفاده از آن در View مورد نظر میباشد. طریقه استفاده از این Helper به شکل زیر خواهد بود.
- <div style="border:solid 1px black; padding:10px; background-color:#FAFAFA">
- <div class="treeview">
- @if (Model != null && Model.Count() >0)
- {
- <ul>
- @Treeview.GetTreeView(Model, Model.FirstOrDefault().ParentMenuID)
- </ul>
- }
- </div>
- </div>
حال وقت ایجاد آن Inline Html Helper است که باید در فولدر App_Code به شکل زیر ایجاد گردد.
- @helper GetTreeView(List<MVCTreeview.SiteMenu> siteMenu, int parentID){
- foreach (var i in siteMenu.Where(a=>a.ParentMenuID.Equals(parentID)))
- {
- <li>
- @{var submenu = siteMenu.Where(a => a.ParentMenuID.Equals(i.MenuID)).Count();}
- @if (submenu > 0)
- {
- <span class="collapse collapsible"> </span>
- }
- else
- {
- <span style="width:15px; display:inline-block"> </span>
- }
- <span>
- <a href="@i.NavURL">@i.MenuName</a>
- </span>
- @if (submenu > 0)
- {
- <ul>
- @Treeview.GetTreeView(siteMenu,i.MenuID)
- @* Recursive Call for Populate Sub items here*@
- </ul>
- }
- </li>
- }
- }
در همین وب سایت Inline Html Helper ها توضیح داده شده است. حال که متد ما آماده شده، اگر به درستی به دیتابیس متصل شده باشید، یک TreeView با Performance خوب و مبتنی بر JQuery خواهید داشت.