2009-07-22 89 views
1

我有一個簡單的網站由根網站有2個站點。自定義SharePoint導航兩層深

現在我想對所有3個站點的導航是完全一樣的,念道:

根網站|子網站1 |子站點2

與當前選定的站點高亮顯示。

我已經能夠手動近做到這一點使用一個asp:Repeater控件和portalsitemapprovider。問題是我可以只在導航上的根網站(將ShowStartingNode設置爲True)或只是兒童網站,我不能同時獲得。

我知道你可以同時獲得,如果你使用一個SharePoint:AspMenu控件,並設置staticdisplaylevels爲2,但我不喜歡亂碼這種控制吐出來。基本上我想模仿這個控制行爲包裹在我自己的兼容CSS。有任何想法嗎?

  • 同樣作爲此外沒有任何人有我如何能有任何的想法,所以如果subsite1的/ 2有後續的子網站/網頁,它不深的用戶瀏覽,它的層級關係多少級仍然突出顯示相關的subsite1或subsite2?我當前的方法將currentnode與每個提供程序節點進行比較,以確定哪些應該突出顯示,但是一旦用戶從每個子網站的着陸頁導航離開,這不起作用。

謝謝!

回答

1

我認爲你必須從根開始和渲染節點在第一個中繼器,然後使用根的childNodes作爲數據源的第二個中繼器,是這樣的:

<asp:Repeater runat="server" ID="MenuRepeater" 
DataSourceID="MainNavigationDataSource"> 

<HeaderTemplate> 
    // code here 
</HeaderTemplate> 

<ItemTemplate> 
    // code here 
<asp:Repeater runat="server" ID="ChildMenuRepeater" 
DataSource='<%# ((SiteMapNode)Container.DataItem).ChildNodes %>'> 

<HeaderTemplate> 
    // code here 
</HeaderTemplate> 

<ItemTemplate> 
    // code here 

</ItemTemplate> 

</ItemTemplate> 

關於你的第二的問題,我認爲(如果我理解正確的話),你可以使用SiteMapNode.IsDescendantOf()方法,但不知何故,我記得,不會在SharePoint工作,所以我已經使用這種代碼檢查,如果一個節點是「主動」節點:

string CurrentContextUrl = SPUtility.GetPageUrlPath(HttpContext.Current); 
Uri CurrentUri = new Uri(CurrentContextUrl); 
bool Active = CurrentUri.LocalPath.Equals(currentNode.Url); 

希望它hel PS出來莫名其妙:-)

+0

非常完美非常感謝! Btw isDescendantOf在SharePoint中工作正常:) – Eriedor 2009-07-23 22:14:36