我的解决方案中的某些节点需要出现在菜单/导航中但不会出现在面包屑中,因为它们没有链接到实际页面,因此在单击时只会出现错误。我从这里尝试了几种与高级节点可见性相关的技术:https://github.com/maartenba/MvcSiteMapProvider/wiki但我似乎无法让它为我工作。同事建议可能在SiteMapPathHelper类中设计SiteMapPath方法的重载,但我不确定这是否准确或如何格式化。我对MVC很新,可以真正使用一些帮助。谢谢!
谢谢@ NightOwl888的回复!我还要添加一些细节,以确保我能够正确处理问题。这是Sitemap文件中节点部分的示例:
<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>
&#34;库存管理&#34;表示用户导航到的初始页面,其中显示的菜单标题为&#34; Group Inventory&#34; (第二个节点),菜单项是下面的项目(&#34;组库存管理&#34;,&#34;管理所有组库存&#34;和&#34;搜索库存&#34;) 。每个菜单项都是指向其他页面的链接,但菜单标题不是链接,不可点击。当我导航到其中一个菜单项时,菜单标题(&#34; Group Inventory&#34;)显示在面包屑显示中,即使它没有链接到任何内容。所以基本上如果我点击第一个菜单项,它会显示&#34; Home&gt;库存管理&gt;群组广告资源&gt;群组库存管理&#34;,如果用户点击&#34;群组库存&#34;它会导致错误。我需要阻止&#34; Group Inventory&#34;从只显示面包屑的踪迹。我从你最初的反应中努力解决这个问题。
P.S。根据我迄今为止看到的示例,“群组资源清单”节点中的某些属性是我为尝试隐藏它而添加的属性。
答案 0 :(得分:0)
SiteMapNode
表示您网站或外部网站上的实际位置(不可点击的分组节点除外),即Clickable
属性设置为false的节点,这只是为了确保您仍然拥有一个不代表真实位置的节点的层次结构。 SiteMapNodes
是节点的服务器端表示 - 您可以将其视为层次结构数据库。
如果您想要添加到客户端菜单中的其他链接(可能是某些JavaScript功能),您可以自定义/Views/Shared/DisplayTemplates/
目录中的菜单帮助程序模板。如果需要,您可以将自己的custom attributes添加到特定节点,以准确地向您的模板发送添加客户端链接的位置。
有关如何实现此目标的更多信息,请参阅MvcSiteMapProvider hidden mvcSiteMapNode with CRUD operation。
相关:
在不可点击的分组节点上,您已指定可见性:visibility="SiteMapPathHelper,!*"
。
假设您已根据documentation将默认可见性提供程序设置为FilteredSiteMapNodeVisibilityProvider
,您明确告诉它&34;使节点在痕迹路径上可见,但不能在其他任何地方看到&#34 ; (菜单,站点地图,XML站点地图等)。因此,它正在完成您指定的操作。但是,您尚未指定期待它要执行的操作。也许你的意思是!SiteMapPathHelper
,这意味着&#34;让节点在任何地方都可见但面包屑痕迹&#34;?
答案 1 :(得分:0)
我能够找到一个有点超出我预期范围的解决方案。我为隐藏名为&#34; isbreadcrumbhidden&#34;所需的特定节点添加了一个属性。然后我能够检查构建面包屑字符串的SiteMapPathHelperModel.cshtml,以排除任何具有&#34; isbreadcrumbhidden&#34;的节点。属性设置为&#34; true&#34;。我喜欢这个解决方案,因为我不必对代码进行任何大量的更改或添加,只需要单个属性。以下是视图中的代码:
@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> > </text>
}
}
}