我目前使用方法
渲染两级菜单@Html.MvcSiteMap().Menu(2,1,true)
为第二级。
我认为我在这种情况下说的是“向我展示与当前路径相关的所有2级节点”。最后一个参数是“allowForwardSearch”,我不知道这意味着什么,我只知道如果我没有将它设置为true,我什么也得不到。
实际上,这会使第二级菜单正常,除非所有第二级节点都通过安全/可见性过滤器过滤掉,这将为第二级留下一个空的节点列表。如果预期结果是NO 2级节点,则它将呈现第1级节点。这会从第1级菜单中删除重复的项目。我希望它不会呈现任何东西,但事实并非如此。
这是一个错误,还是我需要使用特定的覆盖(有80个!)来让它在我要求第二级节点时不再显示我的第一级节点。
感谢。
答案 0 :(得分:1)
这是一个现已在v4.6.13修复的错误。
如果您使用的是早期版本,则可以向您的用户可访问的SiteMap添加一个不可见的虚拟节点,这将覆盖此行为。
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<!-- Level 1 -->
<mvcSiteMapNode title="About" controller="Home" action="About">
<!-- Level 2 -->
<mvcSiteMapNode title="About Me" controller="Home" action="AboutMe"/>
<mvcSiteMapNode title="About You" controller="Home" action="AboutYou" />
<mvcSiteMapNode title="Dummy Node" url="/dummy-url?id=1" visibility="!*"
visibilityProvider="MvcSiteMapProvider.FilteredSiteMapNodeVisibilityProvider, MvcSiteMapProvider" />
</mvcSiteMapNode>
<mvcSiteMapNode title="Contact" controller="Home" action="Contact"/>
</mvcSiteMapNode>
URL实际上不必存在,您只需指定它来覆盖虚拟节点的路由行为。如果您需要在多个地方执行此操作,您将需要多个虚拟URL(因为URL必须是唯一的) - 为此,我建议增加&#34; id&#34;查询字符串参数或以其他方式更改URL。
请注意,如果尚未将visibilityProvider配置为默认可见性提供程序,则只需明确指定visibilityProvider。
您所说的不可见性不正确 - 不会从SiteMap API中删除不可见的节点,只有不可访问的节点。因此,如果您在那里至少有一个不可见节点,当用户无法访问任何其他已配置节点时,菜单将不会切换到基于根节点。