我使用来自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
有人可以帮助我吗? 拉多米尔
答案 0 :(得分:0)
正如the documentation中所指出的,默认行为要求您为每个自定义参数组合添加节点。也就是说,默认情况下,路由/操作参数与SiteMap节点之间存在1对多的关系。
如果这些自定义参数对应于数据库键,通常最好使用IDynamicNodeProvider实现添加节点。
如果“something”参数与页面上的内容无关,则可以通过设置preservedRouteParameters="something"
来覆盖该行为。结果是,无论“某事物”的价值是什么,它都会从当前请求复制到节点中,然后它将始终匹配。这使路由/操作参数与节点之间形成1对1的关系。
要深入了解匹配选项以及何时使用它们,请阅读How to Make MvcSiteMapProvider Remember a User's Position。