gpt4 book ai didi

asp.net-mvc - MvcSiteMapProvider - 多个页面需要链接到一个菜单节点

转载 作者:行者123 更新时间:2023-12-02 04:05:22 25 4
gpt4 key购买 nike

在我的 MVC3 项目中,我安装了 Maartenba 的 MvcSiteMapProvider v.3.2.1,并且我创建了一个非常简单的静态两级菜单。下面是概念图结构。

- Home
- Member Center
- Member Listing [SELECTED]
- Event Calendar
- Documents
- Administration

现在,成员(member)列表下有很多子页面(例如详细信息、编辑等),但我希望这些显示为第三级菜单项(主要是因为它们是捆绑在一起的)到特定的成员(member) ID)。但是,我确实希望所有这些第三级页面都“绑定(bind)”到“成员(member)列表”菜单节点,以便它在这些页面上显示为选中状态。

我的 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>

map 的显示和导航工作得很好,直到我进一步导航到成员(member)区域。例如,如果我经过 Members/Member/List (它正确显示菜单)并转到像 Members/Member/Detail/1 这样的页面,则下面的子节点成员(member)中心(“成员(member)列表”、“事件日历”等)消失。因此,这是我当前代码遇到的两个问题:

  1. 我想指定任何给定页面都是“成员(member)中心”父菜单节点的一部分,以便显示“成员(member)中心”的子菜单节点,无论给定页面是否定义为菜单结构中的特定节点。

  2. 我想指定(可能在 View 或 Controller 操作中)特定页面应绑定(bind)到特定菜单节点。例如,当用户位于 Members/Member/Detail/1 时,我只是希望将“Member Listing”子节点指定为 IsCurrentNode 以便 SiteMapNodeModel. cshtml 文件使用“selectedMenuItem”类正确地装饰它。

有什么建议吗?

最佳答案

您可以将第三级节点添加到站点地图 XML 并指定可见性以将它们从菜单中隐藏。以下是仅在面包屑中显示的节点声明:

<mvcSiteMapNode area="Members"
controller="Member"
action="Detail"
visibility="SiteMapPathHelper,!*"
title="Member details" />

编辑:

据我所知,你不能设置IsCurrentNode。但是您可以使用以下代码检查当前是否选择了菜单节点(我在 SiteMapNodeModel 显示模板中使用它):

IList<string> classes = new List<string> ();
if (Model.IsCurrentNode || Model.IsInCurrentPath && !Model.Children.Any ())
{
classes.Add ("menu-current");
}

关于asp.net-mvc - MvcSiteMapProvider - 多个页面需要链接到一个菜单节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9945654/

25 4 0