2012-07-19 71 views
0

我被要求創建一個asp.net UserControl,它允許在SharePoint 2007網站的子網站之間自定義導航。這些網站模仿了學校結構,每個學期都有不同的班級組。以下是網站結構的簡化版本:自定義SharePoint 2007子網站導航控件

Site Root 
    Search 
    Semester1 
     Class Group 1 
      Class 1 
       Page1.aspx 
       Page2.aspx 
      Class 2 
       Page1.aspx 
       Page2.aspx 
     Class Group 2 
      Class 3 
       Page1.aspx 
       Page2.aspx 
      Class 4 
       Page1.aspx 
       Page2.aspx 
    Semester2 
     Class Group 1 
      Class 1 
       Page1.aspx 
       Page2.aspx 
      Class 2 
       Page1.aspx 
       Page2.aspx 
     Class Group 2 
      Class 3 
       Page1.aspx 
       Page2.aspx 
      Class 4 
       Page1.aspx 
       Page2.aspx 
    Some Other Subsites 

UserControl將放置在類的.aspx頁面上。目的是允許用戶瀏覽不同類別組之間的相同頁面。

E.G.假設我在Semester1/Class Group 1/Class 1/Page2.aspx上。 UserControl將允許我在Semester1下選擇任何其他類。選擇後,它會自動導航到[selected class] /Page2.aspx(因爲我目前在Page2.aspx上)。

在今天之前,我從未使用SiteMapProvider。到目前爲止,我只設法以編程方式遍歷網站結構,並使用默認的CombinedNavSiteMapProvider PortalSiteMapProvider將簡單的站點地圖打印到頁面。我想我需要,但我不知道如何做的是:

  • 獲取/構建部分站點地圖數據結構,其中根節點是當前頁面的父學期。如果有必要,這可以是我自己的數據結構。我想將它綁定到菜單控件。此外,我希望根菜單項具有像「更改類」而不是Semester1的自定義文本。

從那裏,我想我可以使用菜單事件來處理導航。用戶控件的菜單的例子,如果我在Semester1 /類組1/1級/ Page2.aspx:

Change Class 
     Class Group 1 
      Class 1 
      Class 2 
     Class Group 2 
      Class 3 
      Class 4 

如何可以完成上面的項目符號項目?

回答

0

我沒有找到任何優雅。我最終綁定了一個asp.net菜單到CombinedNavSiteMapProvider,然後在DataBound事件處理程序中,我修改了代碼中的菜單項。我插入一個根「Change Class」項,然後使用一個小遞歸方法將IsSelectable設置爲false,以使任何有子項的菜單項都爲false。