为同一个控制器和操作显示不同的痕迹

时间:2014-03-26 14:53:54

标签: asp.net-mvc mvcsitemapprovider

我使用来自http://www.shiningtreasures.com/post/2013/08/10/mvcsitemapprovider-4-seo-features#canonical-tag的教程为同一个控制器和操作制作不同的痕迹路径,例如:

Home > About
Home > Another About

在教程附带的解决方案中,一切正常,但是当我正在制作新的解决方案(mvc4 / mvc5)时,它无效。我将我的文件与教程中的文件进行了比较,它们是相同的(一个变化是我使用的是MvcSiteMapProvider版本4.6.1,而在教程中有一个版本4.0.1)。我正在使用Visual Studio 2013,.net 4.5,我的路由是默认的,我添加到第二个关于链接1234变量。我将我的站点地图简化为:

<mvcSiteMapNode title="Home" controller="Home" action="Index">
  <mvcSiteMapNode title="About" controller="Home" action="About" key="About" />
  <mvcSiteMapNode title="Another About" controller="Home" action="About" something="1234" />
</mvcSiteMapNode>

Home索引中的另一个关于actionlink链接是/ Home / About?something = 1234(第二个关于没有?某事= 1234)但是当我点击它时我的面包屑看起来:

 Home > About    instead Home > Another About

有人可以帮助我吗? 拉多米尔

1 个答案:

答案 0 :(得分:0)

正如the documentation中所指出的,默认行为要求您为每个自定义参数组合添加节点。也就是说,默认情况下,路由/操作参数与SiteMap节点之间存在1对多的关系。

如果这些自定义参数对应于数据库键,通常最好使用IDynamicNodeProvider实现添加节点。

如果“something”参数与页面上的内容无关,则可以通过设置preservedRouteParameters="something"来覆盖该行为。结果是,无论“某事物”的价值是什么,它都会从当前请求复制到节点中,然后它将始终匹配。这使路由/操作参数与节点之间形成1对1的关系。

要深入了解匹配选项以及何时使用它们,请阅读How to Make MvcSiteMapProvider Remember a User's Position