Asp.net mvc 如何在ASP.NET MVC中动态加载布局或母版页中的菜单项?
您好,我想动态加载_Layout.cshtml文件中的菜单项 我该怎么做?你能给我举一个这样做的代码示例吗?还是什么 我不是在寻找任何特别奇特的方法来做这件事 下面我将描述我的意图: 我只想在屏幕左侧显示不同菜单项的列表。假设菜单项的层次结构为 类别->类型->品牌->型号 因此,最初只是一个类别菜单项列表呈现,然后选择一个类别和一个类型菜单项列表呈现,选择一个类型和一个品牌菜单项列表呈现,选择一个品牌和一个模型菜单项列表呈现,如下所示: (菜单的初始外观) 类别:Asp.net mvc 如何在ASP.NET MVC中动态加载布局或母版页中的菜单项?,asp.net-mvc,Asp.net Mvc,您好,我想动态加载_Layout.cshtml文件中的菜单项 我该怎么做?你能给我举一个这样做的代码示例吗?还是什么 我不是在寻找任何特别奇特的方法来做这件事 下面我将描述我的意图: 我只想在屏幕左侧显示不同菜单项的列表。假设菜单项的层次结构为 类别->类型->品牌->型号 因此,最初只是一个类别菜单项列表呈现,然后选择一个类别和一个类型菜单项列表呈现,选择一个类型和一个品牌菜单项列表呈现,选择一个品牌和一个模型菜单项列表呈现,如下所示: (菜单的初始外观) 类别: 汽车 船 自行车 摩托车
- 汽车
- 船
- 自行车
- 摩托车
- 轿跑车
- 卡车
- 货车
- 敞篷车
- 宝马
- 沃尔沃
- 福特
- 梅赛德斯
- 325i
- 128i
- 650i
- M6
<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方式动态打开,或者您是否打算在每次有人单击菜单项时进行回发,然后重新呈现页面?每次有人单击菜单项时,我都会呈现一个新菜单,直到他们到达层次结构的最后一级,该网站在其开始菜单中执行此操作:您好,穆罕默德·阿德尔·扎希德,我认为您的解决方案不起作用,因为下一个菜单是根据上一个菜单中选择的内容动态加载的。再看看我的问题。这个网站的初始菜单就像我想做的: