I am loading menus dynamically in the layout page from the database. So, I used Partial View to achieve this. This is my code:
I have created a Models class called "MenuModel":
MenuModel.cs
public class MenuModel
{
public List<MainMenu> MainMenuModel { get; set; }
}
public class MainMenu
{
public int MainMenuID;
public string MainMenuName;
public string MainMenuController;
public string MainMenuAction;
}
I have created a controller class called "Partial":
PartialController.cs
using System.Data.Entity;
using Insights.Models;
public ActionResult Index()
{
return View();
}
[ChildActionOnly]
public ActionResult LoadMenu()
{
MenuModel ObjMenuModel = new MenuModel();
ObjMenuModel.MainMenuModel = new List<MainMenu>();
ObjMenuModel.MainMenuModel = GetMainMenu();
return PartialView(ObjMenuModel);
}
public List<MainMenu> GetMainMenu()
{
List<MainMenu> ObjMainMenu = new List<MainMenu>();
var context = new InsightsEntities();
ObjMainMenu = context.Insights_mMenu.Where(m => m.parentMenuUID == 0).Select(x => new MainMenu()
{
MainMenuID = x.menuUID,
MainMenuName = x.menuName,
MainMenuController = x.menuURLController,
MainMenuAction = x.menuURLAction
}).ToList();
return ObjMainMenu;
}
I have created a PartialView for the ActionResult "LoadMenu":
@model Insights.Models.MenuModel
@{
foreach (var MenuItem in Model.MainMenuModel)
{
<li class="active">
<div class="sidebar-menu-item-wrapper">
<a href='@Url.Action(@MenuItem.MainMenuAction, @MenuItem.MainMenuController)'><span>@MenuItem.MainMenuName</span></a>
</div>
</li>
}
}
This is my layout page:
<ul class="sidebar-menu on-click" id="main-menu">
<li class="active">
<div class="sidebar-menu-item-wrapper">
<a href="#">
<i class="icon-home"></i>
<span>Home</span>
</a>
</div>
</li>
@{ Html.RenderAction("LoadMenu", "Partial"); }
</ul>
The database returns two menus such as "Masters" and "Invoice". But when I click the "Masters" Menu, it again calls the partial controller class and once again the two menus Masters & Invoice are loading again. So I cannot highlight which menu is now opened. I have attached the Masters screen.
` as a child of `
– Oct 30 '15 at 07:27` (only `- ` elements are valid) and you also have duplicate `id` attributes (both `
` elements have `id="main-menu"`. Suggest you remove the `
` element from the partial