2012-07-19 69 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。