Entity framework 单击布局页面中的菜单-MVC4时,将再次加载动态菜单

Entity framework 单击布局页面中的菜单-MVC4时,将再次加载动态菜单,entity-framework,asp.net-mvc-4,menu,asp.net-mvc-partialview,layout-page,Entity Framework,Asp.net Mvc 4,Menu,Asp.net Mvc Partialview,Layout Page,我正在从数据库中动态加载布局页面中的菜单。所以,我使用了局部视图来实现这一点。这是我的代码: 我创建了一个名为“MenuModel”的模型类: MenuModel.cs public class MenuModel { public List<MainMenu> MainMenuModel { get; set; } } public class MainMenu { public int MainMenuID; public string

我正在从数据库中动态加载布局页面中的菜单。所以,我使用了局部视图来实现这一点。这是我的代码:

我创建了一个名为“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;
}
公共类菜单模型
{
公共列表MainMenuModel{get;set;}
}
公共类主菜单
{
公共int MainMenuID;
公共字符串MainMenuame;
公共字符串主控器;
公共字符串维护;
}
我创建了一个名为“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;
 }
使用System.Data.Entity;
使用洞察、模型;
公共行动结果索引()
{
返回视图();
}
[仅限儿童]
公共操作结果加载菜单()
{
MenuModel ObjMenuModel=新的MenuModel();
ObjMenuModel.MainMenuModel=新列表();
ObjMenuModel.MainMenuModel=GetMainMenu();
返回PartialView(ObjMenuModel);
}
公共列表GetMainMenu()
{
List ObjMainMenu=新建列表();
var context=newinsightsenties();
ObjMainMenu=context.Insights\u mMenu.Where(m=>m.parentMenuUID==0)。选择(x=>new MainMenu()
{
MainMenuID=x.menuUID,
mainmenuame=x.menuName,
MainMenuController=x.menuURLController,
MainMenuAction=x.MenuUrAction
}).ToList();
返回ObjMainMenu;
}
我已经为ActionResult“LoadMenu”创建了一个PartialView:

@model Insights.Models.MenuModel
@{
foreach(Model.MainMenuModel中的var MenuItem)
{
  • } }
    这是我的布局页面:

    <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>
    
    点击“id=”主菜单“>
  • @{Html.RenderAction(“加载菜单”、“部分”);}
    数据库返回两个菜单,如“主菜单”和“发票”。但是当我点击“Masters”菜单时,它再次调用partial controller类,并且两个菜单Masters&Invoice再次加载。因此,我无法突出显示现在打开的菜单。我已附加主屏幕。

    可能没有关联,但您生成的html无效-您有一个
        作为
          的子元素(只有
        • 元素有效),并且您还有重复的
          id
          属性(两个
            元素都有
            id=“主菜单”
            。建议您从partialok中删除
            元素。我尝试了一下,并让您知道。@StephenMuecke:谢谢。它现在正在加载。但当我单击菜单时,它再次调用LoadMenu方法,再次加载所有菜单,然后移动到相应的视图。为什么会发生这种情况?我不确定是否理解您的意思。如果单击其中一个链接,它应该重定向到相应的方法,并假设视图使用相同的布局,它将调用
            LoadMenu()
            并在新视图中再次显示菜单。尽管此处有些奇怪。您的布局页面不应包含
            @model Insights.Models.MenuModel
            您确定这是一个布局,还是只是一个视图?
            <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>