MVC Sitemap两个页面应链接同一节点

时间:2014-09-18 08:41:26

标签: c# asp.net-mvc mvcsitemapprovider

我使用MvcSitemap作为主菜单,我需要组织两个动作引用菜单中的一个节点。例如,页面“产品”,页面上有过滤。

  

控制器="产品"行动="指数"
  控制器="产品"行动="过滤器"

现在我定义了这个节点:

  

< mvcSiteMapNode title =" Product"控制器="产品"行动="指数" />

它的工作正确。选择了右侧菜单项。但当"过滤"动作有效,没有定义任何菜单项。 过滤完成后是否可能,"产品"选择菜单中的节点?

1 个答案:

答案 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