我使用MvcSitemap作为主菜单,我需要组织两个动作引用菜单中的一个节点。例如,页面“产品”,页面上有过滤。
控制器="产品"行动="指数"
控制器="产品"行动="过滤器"
现在我定义了这个节点:
< mvcSiteMapNode title =" Product"控制器="产品"行动="指数" />
它的工作正确。选择了右侧菜单项。但当"过滤"动作有效,没有定义任何菜单项。 过滤完成后是否可能,"产品"选择菜单中的节点?
答案 0 :(得分:0)
SiteMap要求每个节点必须具有唯一的URL,否则在查找" current"时,它将无法区分它们。节点。在这种情况下,第一场比赛将永远胜利。
您可以通过向URL添加其他查询字符串参数来解决此限制。
<mvcSiteMapNode title="Filtered Product" controller="Product" action="Filter" filtered="true"/>
或者通过更改路由配置以包含额外的路由参数来使请求唯一。
如果网址都是面向互联网的,您可以通过使用canonicalKey属性告诉搜索引擎您打算将相同的内容放在2个网址上。
<mvcSiteMapNode title="Product" controller="Product" action="Index" key="Product_Index"/>
<mvcSiteMapNode title="Filtered Product" controller="Product" action="Filter" filtered="true" canonicalKey="Product_Index"/>
然后将规范HTML帮助器添加到布局页面的head部分。
<head>
@Html.MvcSiteMap().CanonicalTag()
</head>
<强>参考强>
http://www.shiningtreasures.com/post/2013/08/10/mvcsitemapprovider-4-seo-features#canonical-tag https://github.com/maartenba/MvcSiteMapProvider/wiki/Multiple-Navigation-Paths-to-a-Single-Page https://github.com/maartenba/MvcSiteMapProvider/wiki/HtmlHelper-extensions