MvcSitemapProvider - 在url解析器中添加要忽略的值

时间:2014-02-04 18:57:48

标签: asp.net-mvc mvcsitemapprovider

我的网址列表中有一个包含动态ID的链接,即

/控制器/动作/ ID

目前我不需要为每个页面添加一个自己的面包屑,更好的方法是跳回到索引操作痕迹或简单设置一个父解析网址。

是否有一个简单的解决方案或任何提示如何解决这个问题?

提前谢谢

1 个答案:

答案 0 :(得分:2)

使用MvcSiteMapProvider有两种方法可以使用“id”或任何其他路由值。

1。为每个“id”创建一个节点(通常这是通过DynamicNodeProviderBase实现完成的)。这使您在“id”值和节点之间建立了一对一的关系。如果你有< 10,000个节点,您希望它们都被搜索引擎索引。

<mvcSiteMapNode title="Product 1" controller="Product" action="Details" id="1"/>
<mvcSiteMapNode title="Product 2" controller="Product" action="Details" id="2"/>
<mvcSiteMapNode title="Product 3" controller="Product" action="Details" id="3"/>

2. 通过在节点上设置savedRouteParameters =“id”,创建单个节点以匹配所有“id”值。这将为您提供路由参数名称“id”(值无关紧要)与节点之间的1对1关系。这只适用于面包屑痕迹;对于Menu,SiteMap和/sitemap.xml端点,您需要使用visibility providerSiteMapTitle属性来修复UI的显示。将此方法用于编辑数据的管理页面,搜索引擎永远不会看到它。

<mvcSiteMapNode title="Product 1" controller="Product" action="Details" preservedRouteParameters="id"/>

请注意,如果您有多个参数,也可以在同一节点上组合这两种技术。例如,如果您具有搜索引擎永远不需要了解的用户特定“userId”参数,则可以减少节点数量(通常需要为[所有“id”值]提供节点X [全部“userId”值 - 即,总节点数将等于SiteMap中所有潜在值组合的乘积),始终匹配“userId”,但仍为所有产品编制索引。

<mvcSiteMapNode title="Product 1" controller="Product" action="Details" id="1" preservedRouteParameters="userId"/>
<mvcSiteMapNode title="Product 2" controller="Product" action="Details" id="2" preservedRouteParameters="userId"/>
<mvcSiteMapNode title="Product 3" controller="Product" action="Details" id="3" preservedRouteParameters="userId"/>

另请注意,您不必使用XML来使用这些技术 - 它们在以其他方式声明节点时也可以使用。

我的博客上有一篇完整的文章介绍了每种技术以及可下载的工作示例:How to Make MvcSiteMapProvider Remember a User's Position