【发布时间】:2012-03-30 15:09:27
【问题描述】:
在我的 MVC3 项目中,我安装了 Maartenba 的 MvcSiteMapProvider v.3.2.1,并且我创建了一个非常简单的静态两级菜单。下面是概念图结构。
- Home
- Member Center
- Member Listing [SELECTED]
- Event Calendar
- Documents
- Administration
现在,会员列表下有很多子页面(例如,详细信息、编辑等),但我不希望这些显示为 3 级菜单项(主要是因为它们是并列的到特定的成员 ID)。但是,我确实希望将所有这些第三级页面“绑定”到成员列表菜单节点,以便在这些页面上显示为选中状态。
我的 Mvc.SiteMap 文件中有以下代码:
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="Member Center" area="Members" controller="Home" action="Index" roles="Approved Member" >
<mvcSiteMapNode title="Member Listing" area="Members" controller="Member" action="List" />
<mvcSiteMapNode title="Event Calendar" area="Members" controller="Event" action="List" />
<mvcSiteMapNode title="Documents" area="Members" controller="Document" action="List" />
</mvcSiteMapNode>
<mvcSiteMapNode title="Administration" area="Admin" controller="Home" action="Index" roles="Site Administrator" >
</mvcSiteMapNode>
</mvcSiteMapNode>
为了呈现菜单,我在 _Layout.cshtml 文件中使用了以下代码:
@Html.MvcSiteMap().Menu(1, true, true, 1, true, true)
最后,我修改了 SiteMapNodeModel.cshtml 文件,以便将“selectedMenuItem”类添加到与用户正在查看的页面相关的节点。这是呈现菜单节点的代码片段。
@model SiteMapNodeModel
<a href="@Model.Url" class="@(Model.IsCurrentNode ? "selectedMenuItem" : "")">@Model.Title</a>
地图的显示和导航工作正常,直到我进一步导航到成员区域。例如,如果我经过Members/Member/List(正确显示菜单)并进入类似Members/Member/Detail/1 的页面,则会员中心下的子节点(“会员列表”、“活动日历”等)消失。因此,这是我当前的代码遇到的两个问题:
我想指定任何给定页面是“会员中心”父菜单节点的一部分,这样无论给定页面是否定义为“会员中心”的子菜单节点都会显示菜单结构中的特定节点。
-
我想指定(可能在视图或控制器操作中)特定页面应绑定到特定菜单节点。例如,当用户位于
Members/Member/Detail/1时,我只想将“成员列表”子节点指定为IsCurrentNode,以便 SiteMapNodeModel.cshtml 文件使用“selectedMenuItem”类正确装饰它。
有什么建议吗?
【问题讨论】:
标签: asp.net-mvc mvcsitemapprovider