Asp.net mvc 如何在ASP.NET MVC中动态加载布局或母版页中的菜单项?

Asp.net mvc 如何在ASP.NET MVC中动态加载布局或母版页中的菜单项?,asp.net-mvc,Asp.net Mvc,您好,我想动态加载_Layout.cshtml文件中的菜单项 我该怎么做?你能给我举一个这样做的代码示例吗?还是什么 我不是在寻找任何特别奇特的方法来做这件事 下面我将描述我的意图: 我只想在屏幕左侧显示不同菜单项的列表。假设菜单项的层次结构为 类别->类型->品牌->型号 因此,最初只是一个类别菜单项列表呈现,然后选择一个类别和一个类型菜单项列表呈现,选择一个类型和一个品牌菜单项列表呈现,选择一个品牌和一个模型菜单项列表呈现,如下所示: (菜单的初始外观) 类别: 汽车 船 自行车 摩托车

您好,我想动态加载_Layout.cshtml文件中的菜单项

我该怎么做?你能给我举一个这样做的代码示例吗?还是什么

我不是在寻找任何特别奇特的方法来做这件事

下面我将描述我的意图:

我只想在屏幕左侧显示不同菜单项的列表。假设菜单项的层次结构为

类别->类型->品牌->型号

因此,最初只是一个类别菜单项列表呈现,然后选择一个类别和一个类型菜单项列表呈现,选择一个类型和一个品牌菜单项列表呈现,选择一个品牌和一个模型菜单项列表呈现,如下所示:

(菜单的初始外观)

类别:

  • 汽车
  • 自行车
  • 摩托车
(选择汽车)

类型:

  • 轿跑车
  • 卡车
  • 货车
  • 敞篷车
(选择Coupe)

品牌:

  • 宝马
  • 沃尔沃
  • 福特
  • 梅赛德斯
(选择宝马)

型号:

  • 325i
  • 128i
  • 650i
  • M6

我会在局部视图中执行此操作,并使用RenderPartial从布局页面调用它。在局部视图中,您可以将它们写为未排序的列表,如

<ul>
   <li>Categories
         <ul class='sub'>
            <li> Cars</li>
            <li> Boats</li>
            <li> Bikes</li>
         </ul>
   </li>
   <li>Types
         <ul class='sub'>
            <li>Coupes</li>
            <li>Trucks</li>
            <li>Van</li>
         </ul>
   </li>
   <li>Brands
         <ul class='sub'>
            <li> BMW</li>
            <li> Volwo</li>

         </ul>
   </li>
</ul> 
  • 类别
    • 汽车
    • 自行车
  • 类型
    • 轿跑车
    • 卡车
    • 货车
  • 品牌
    • 宝马
    • 沃沃

然后,您可以编写一些css,将主ul显示为菜单,并在悬停或单击时打开和关闭内部uls。此外,您可以创建一个html助手,并将包含所有这些菜单和菜单项的模型传递给它,它将为您生成菜单。另外,如果您对第三方开源解决方案感兴趣,您可以查看一下

我会在部分视图中完成,并使用RenderPartial从布局页面调用它。在局部视图中,您可以将它们写为未排序的列表,如

<ul>
   <li>Categories
         <ul class='sub'>
            <li> Cars</li>
            <li> Boats</li>
            <li> Bikes</li>
         </ul>
   </li>
   <li>Types
         <ul class='sub'>
            <li>Coupes</li>
            <li>Trucks</li>
            <li>Van</li>
         </ul>
   </li>
   <li>Brands
         <ul class='sub'>
            <li> BMW</li>
            <li> Volwo</li>

         </ul>
   </li>
</ul> 
  • 类别
    • 汽车
    • 自行车
  • 类型
    • 轿跑车
    • 卡车
    • 货车
  • 品牌
    • 宝马
    • 沃沃

然后,您可以编写一些css,将主ul显示为菜单,并在悬停或单击时打开和关闭内部uls。此外,您可以创建一个html助手,并将包含所有这些菜单和菜单项的模型传递给它,它将为您生成菜单。此外,如果您对第三方开源解决方案感兴趣,您可以查看一下

如果您谈论的是特定于控制器或操作的项目,您可以让操作在ViewData中放置一些内容,这些内容将由呈现菜单的任何视图读取

编辑:一个工作示例

数据结构:具有以下列的自引用(递归)表:

MenuItemId - int, primary key, identity
DisplayName - varchar
ParentMenuItemId - int, nullable, FK to MenuItemId
然后,我在OP中插入了您确定的值,深入研究了汽车/双门轿车/宝马

这是MVC3/Razor,以及一个实体框架模型

控制器:(该操作采用一个名为“id”的可空int参数,这意味着MVC将自动通过标准路由处理程序将其路由为/Controller/action/id)

视图:

@ViewData[“面包屑”]
    @{ var menuItems=ViewData[“currentMenuItems”]作为IEnumerable; foreach(菜单项中的变量菜单项){
  • } }

这不仅显示指定父项的适当项目列表,还显示返回到根的面包屑轨迹。

如果您谈论的是特定于控制器或操作的项目,则可以让操作在ViewData中放置一些内容,这些内容将由呈现菜单的任何视图读取

编辑:一个工作示例

数据结构:具有以下列的自引用(递归)表:

MenuItemId - int, primary key, identity
DisplayName - varchar
ParentMenuItemId - int, nullable, FK to MenuItemId
然后,我在OP中插入了您确定的值,深入研究了汽车/双门轿车/宝马

这是MVC3/Razor,以及一个实体框架模型

控制器:(该操作采用一个名为“id”的可空int参数,这意味着MVC将自动通过标准路由处理程序将其路由为/Controller/action/id)

视图:

@ViewData[“面包屑”]
    @{ var menuItems=ViewData[“currentMenuItems”]作为IEnumerable; foreach(菜单项中的变量菜单项){
  • } }

这不仅显示指定父项的适当项目列表,还显示返回根的面包屑痕迹。

此菜单是否必须以ajaxy方式动态打开,或者您是否打算在每次有人单击菜单项时进行回发,然后重新呈现页面?每次有人单击菜单项时,我都会呈现一个新菜单,直到他们达到层次结构中的最后一级,此网站在其开始菜单中执行此操作:此菜单是否必须以ajaxy方式动态打开,或者您是否打算在每次有人单击菜单项时进行回发,然后重新呈现页面?每次有人单击菜单项时,我都会呈现一个新菜单,直到他们到达层次结构的最后一级,该网站在其开始菜单中执行此操作:您好,穆罕默德·阿德尔·扎希德,我认为您的解决方案不起作用,因为下一个菜单是根据上一个菜单中选择的内容动态加载的。再看看我的问题。这个网站的初始菜单就像我想做的: