0

我的解决方案中有某些节点需要出现在菜单/导航中,但不会出现在面包屑中,因为它们没有链接到实际页面,因此在单击时只会显示错误。我从这里尝试了几种与高级节点可见性有关的技术:https ://github.com/maartenba/MvcSiteMapProvider/wiki ,但我似乎无法让它为我工作。一位同事建议可能为 SiteMapPathHelper 类中的 SiteMapPath 方法设计一个重载,但我不确定这是否准确或如何格式化。我对 MVC 还很陌生,真的可以使用一些帮助。谢谢!


感谢@NightOwl888 的回复!我将添加更多细节以确保我做的事情正确。这是站点地图文件中节点部分的示例:

<mvcSiteMapNode title="Inventory Management" url="~/Resources/Inventory/Default.aspx"> <mvcSiteMapNode title="Group Inventory" action="#" visibility="SiteMapPathHelper,!*" clickable="false"> <mvcSiteMapNode title="Group Inventory Management" url="~/Resources/Inventory/UnitInventory" controller="GroupInventory" action="Index" /> <mvcSiteMapNode title="Manage All Group Inventory" url="~/Resources/Inventory/ManageAllGroupInventory.aspx"> <mvcSiteMapNode title="Manage Inventory Item" url="~/Resources/Inventory/ManageInventoryItem.aspx" /> </mvcSiteMapNode> <mvcSiteMapNode title="Search Inventory" url="~/Resources/Inventory/SearchInventory.aspx?module=resource" /> </mvcSiteMapNode> </mvcSiteMapNode>

“库存管理”代表用户导航到的初始页面,其中显示标题为“组库存”(第二个节点)的菜单,菜单项是其下方的项目(“组库存管理”,“管理所有组库存”和“搜索库存”)。每个菜单项都是指向其他页面的链接,但菜单标题不是链接且不可点击。当我导航到其中一个菜单项时,菜单标题(“组库存”)显示在面包屑显示中,即使它没有链接到任何内容。所以基本上如果我点击第一个菜单项,它会显示“主页 > 库存管理 > 集团库存 > 集团库存管理”,如果用户点击“集团库存”,它会导致错误。我需要防止“组库存”仅显示在面包屑路径中。我正在努力从你最初的回应中弄清楚这一点。

PS Group Inventory 节点中的一些属性是我添加的以尝试隐藏它,基于我目前看到的示例。

4

2 回答 2

0

我能够找到一个超出我预期范围的解决方案。我向需要隐藏的特定节点添加了一个名为“isbreadcrumbhidden”的属性。然后,我能够检查 SiteMapPathHelperModel.cshtml(构建面包屑字符串的视图),以排除任何将“isbreadcrumbhidden”属性设置为“true”的节点。我喜欢这个解决方案,因为我不需要对代码进行任何广泛的更改或添加,只需单个属性即可。以下是视图中的代码:

@foreach (var node in Model) {
    if (!node.Attributes.ContainsKey("isbreadcrumbhidden") || (node.Attributes.ContainsKey("isbreadcrumbhidden") && node.Attributes["isbreadcrumbhidden"].ToString() == "false"))
    {
        @Html.DisplayFor(m => node);

            if (node != Model.Last()) {
                <text> &gt; </text>
        }
    }
}
于 2017-01-20T17:46:34.933 回答
0

ASiteMapNode表示您的网站或外部网站上的真实位置(不可点击的分组节点除外 - 即Clickable属性设置为 false 的节点,这只是为了确保您仍然具有节点的层次结构不代表真实位置)。SiteMapNodes是节点的服务器端表示 - 您可以将其视为分层数据库。

如果您想在客户端的菜单中添加其他链接(可能是为了某些 JavaScript 功能),您可以自定义/Views/Shared/DisplayTemplates/目录中的菜单帮助程序模板。如果需要,您可以将自己的自定义属性添加到特定节点,以指示您的模板准确地在何处添加客户端链接。

有关如何完成此操作的更多信息,请参阅MvcSiteMapProvider hidden mvcSiteMapNode with CRUD operation 。

有关的:


在不可点击的分组节点上,您已指定可见性:visibility="SiteMapPathHelper,!*"

FilteredSiteMapNodeVisibilityProvider假设您已经按照文档设置了默认的可见性提供程序,您具体告诉它“使节点在面包屑路径上可见,但在其他任何地方都不可见”(菜单、站点地图、XML 站点地图等)。所以,它正在做你指定要做的事情。但是,您还没有指定您期望它做什么。也许您的意思是!SiteMapPathHelper,这意味着“使节点在除面包屑路径之外的任何地方都可见”?

于 2017-01-18T07:56:48.167 回答