mercredi 8 avril 2015

Menu Dynamic ASP.NET MVC5 Razor

Menu Dynamic ASP.NET MVC5 Razor

Model Menu:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace Models
{
    public class Menu
    {
        public int ID { get; set; }

        public string Nom { get; set; }

        public string Description { get; set; }

        public string Lien { get; set; }

        public int Ordre { get; set; }

        public int OidMenuParent { get; set; }
    }
}

Controller

    public class HomeController : Controller
    {
        public MenuRepository menurepository = new MenuRepository();
        public ActionResult Index()
        {
            var viewmodel=new HomeViewModel
            {
              Menus=this.menurepository.All,
            };
            return View(viewmodel);
        }
    }

View Model

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Models;
namespace ViewModels
{
    public class HomeViewModel
    {
        public IEnumerable<Menu> Menus { get; set; }
    }
}

View

  <ul class="nav navbar-nav navbar-left">
                            @{var menus=Model.Menus;}
                            @{var menusparent = (from mp in menus where mp.OidMenuPatent==0 select mp).ToList();}
                            @foreach (var item in menusparent)
                            {

                                var query = (from mc in menus where mc.OidMenuPatent == item.ID select mc).ToList();
                            
                                if (query.Count() > 0) {
                                    <li class="dropdown active">
                                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">@item.Description <span class="caret"></span></a>
                                        <ul class="dropdown-menu" role="menu">
                                            @foreach (var childmenu in query)
                                            {
                                        
                                                <li>@Html.ActionLink(@childmenu.Description, @childmenu.Lien, "Home")</li>
                                            }
                                        </ul>
                                    </li>
                                }
                                else { 
                                <li>@Html.ActionLink(@item.Description, @item.Lien, "Home")</li>
                                }
                            }

                            
</ul>