2013-08-28 75 views
1

我試圖用多個導航路徑從MvcSiteMapProvider單頁特點:https://github.com/maartenba/MvcSiteMapProvider/wiki/Multiple-Navigation-Paths-to-a-Single-Page多個導航路徑單頁

而且這些都是記錄指向同一資源的2個不同的導航路徑:

<mvcSiteMapNode title="Multi Analysis" controller="Report" action="MultiAnalysis" preservedRouteParameters="id"> 
<mvcSiteMapNode title="Analysis" controller="Report" action="Analysis" preservedRouteParameters="id,type" type="ma" /> 
</mvcSiteMapNode> 

<mvcSiteMapNode title="Single Analysis" controller="Report" action="SingleAnalysis" preservedRouteParameters="id"> 
<mvcSiteMapNode title="Analysis" controller="Report" action="Analysis" preservedRouteParameters="id,type" type="sa" /> 
</mvcSiteMapNode> 

但是,麪包屑總是爲最上面的一個產生。有什麼我失蹤了嗎?

回答

1

是的,有一些你錯過了。路由值和保留的路由值不能同時用於同一個節點。我更新了wiki頁面,因爲示例配置也無效。

<mvcSiteMapNode title="Multi Analysis" controller="Report" action="MultiAnalysis" preservedRouteParameters="id"> 
    <mvcSiteMapNode title="Analysis" controller="Report" action="Analysis" preservedRouteParameters="id" type="ma" /> 
</mvcSiteMapNode> 

<mvcSiteMapNode title="Single Analysis" controller="Report" action="SingleAnalysis" preservedRouteParameters="id"> 
    <mvcSiteMapNode title="Analysis" controller="Report" action="Analysis" preservedRouteParameters="id" type="sa" /> 
</mvcSiteMapNode> 

請注意,在這種情況下,在preserveRouteParameters中缺少「類型」。

使用preservedRouteParameters用於強制所有可能的Ids通過複製當前請求中的參數來匹配單個節點。這通常僅用於使SiteMapPath HTML助手與CRUD操作一起工作,在這些操作中使用數據庫記錄的列表或表作爲主導航。如果您使用的是菜單或SiteMap HTML幫助程序,或者您希望/sitemap.xml端點(搜索引擎的站點地圖XML)中列出的頁面,則不建議使用preservedRouteParameters。

我創造了這個功能的工作演示在我的博客:http://www.shiningtreasures.com/post/2013/08/10/mvcsitemapprovider-4-seo-features#canonical-tag

+0

對,但是如果你看到最後一個屬性'type =「ma」',它們實際上是不同的。我能夠解決它使用:'MvcSiteMapProvider.SiteMaps.GetSiteMap()。Clear(); MvcSiteMapProvider.SiteMaps.GetSiteMap()。BuildSiteMap();'這是我使用這個提供程序的第一個項目,所以我不熟悉這個緩存如何工作。 – Ganesh

+0

你說得對,我錯過了。這與緩存沒有任何關係。你的配置是無效的,因爲你指定了一個類型和一個preservedRouteParameters =「type」,它有效地用當前請求中的值覆蓋第一個類型。這可能就是爲什麼你會看到緩存問題。 – NightOwl888

+0

我已經更新了我的答案。我還更新了wiki,並且正在修復MvcSiteMapProvider,因此當您爲路由值和保留的路由參數指定相同的密鑰時,它會引發異常,因爲這永遠不會有用。 – NightOwl888

0

這個工作對現在:

MvcSiteMapProvider.SiteMaps.GetSiteMap().Clear(); MvcSiteMapProvider.SiteMaps.GetSiteMap().BuildSiteMap();

我想直到我弄清楚如何我會繼續使用該緩存在MvcSiteMapProvider上工作

+0

永遠不要做這個。這有效地實現了對緩存計時器仍在滴答的站點地圖的就地重建。站點地圖構建代碼不是線程安全的。如果多個用戶在同一時間調用此功能,則可能會導致部分站點地圖或具有大量重複節點的站點地圖。 BuildSiteMap()用於內部使用,不被最終用戶調用。 – NightOwl888