您好我想在_Layout.cshtml文件中动态加载meny项目。
我该怎么做?你能指点我做一个代码示例吗?还是什么?
我并不是在寻找任何特别奇特的方式。
下面我将描述我的意图:
我只想在屏幕左侧显示不同菜单项的列表。假设有一个以
形式的菜单项层次结构分类 - >类型 - >品牌 - >模型。
所以最初只是一个类别菜单项呈现的列表,然后选择一个类别和一个类型菜单项呈现列表,一个选择一个类型和一个品牌菜单项呈现列表,一个选择一个品牌和一个列表模型菜单项呈现,如下所示:
(菜单的初始外观)
分类
(选择汽车)
类型:
(Coupe被选中)
品牌:
(选择宝马)
型号:
答案 0 :(得分:0)
我会在局部视图中执行此操作,并使用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帮助器并传递包含所有这些菜单和菜单项的模型,它将为您生成菜单。 Morover,如果您对第三方开源解决方案感兴趣,可以查看Telerik Menu
答案 1 :(得分:-1)
如果您正在讨论特定于控制器或操作的项目,您可以在ViewData中放置一些操作,该操作将通过呈现菜单的任何视图读取。
编辑:一个工作示例
数据结构:一个自引用(递归)表,包含以下列:
MenuItemId - int, primary key, identity
DisplayName - varchar
ParentMenuItemId - int, nullable, FK to MenuItemId
然后我插入您在OP中识别的值,向下钻取Cars / Coupe / BMW。
这是MVC3 / Razor,以及实体框架模型。
控制器:(该操作采用名为“id”的可为空的int参数,这意味着MVC将自动通过标准路由处理程序将其路由为/ Controller / Action / Id)
System.Text.StringBuilder sb = new System.Text.StringBuilder();
using (Models.StackOverflowTestEntities e = new Models.StackOverflowTestEntities())
{
// Insert the child menu items based on the current parent
ViewData["currentMenuItems"] = e.MenuItems.Where(i => (!id.HasValue && !i.ParentMenuItemId.HasValue) || (i.ParentMenuItemId == id)).ToList();
// Get our breadcrumb trail
if (id.HasValue)
{
int? currentItem = id;
while (currentItem.HasValue)
{
var menuItem = e.MenuItems.Where(i => i.MenuItemId == currentItem).First();
// TODO: make these into actual hyperlinks?
sb.Insert(0, string.Format(" » {0}", menuItem.DisplayName));
currentItem = menuItem.ParentMenuItemId;
}
}
}
sb.Insert(0, "Root");
ViewData["breadcrumb"] = sb.ToString();
查看:
<div>@ViewData["breadcrumb"]</div>
<ul>
@{
var menuItems = ViewData["currentMenuItems"] as IEnumerable<MvcApplication1.Models.MenuItem>;
foreach (var menuItem in menuItems) {
<li><a href="/Home/Index/@menuItem.MenuItemId">@menuItem.DisplayName</a></li>
}
}
</ul>
这不仅显示指定父级的相应项目列表,还显示返回根目录的痕迹痕迹。