C# 自定义SharePoint 2007子网站导航控件

C# 自定义SharePoint 2007子网站导航控件,c#,sharepoint-2007,navigation,sitemapprovider,C#,Sharepoint 2007,Navigation,Sitemapprovider,我被要求创建一个asp.net用户控件,允许在SharePoint 2007网站的子网站之间进行自定义导航。这些网站模仿学校结构,每个学期都有不同的班级。以下是网站结构的简化版本: Site Root Search Semester1 Class Group 1 Class 1 Page1.aspx Page2.aspx Class 2

我被要求创建一个asp.net用户控件,允许在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将放置在classes.aspx页面上。它的目的是允许用户在不同的类组之间导航到相同的页面

例如,假设我在学期1/班级1/班级1/页面2.aspx上。UserControl允许我选择Semester1下的任何其他类。选择后,它将自动导航到[selected class]/Page2.aspx(因为我当前在Page2.aspx)

在今天之前,我从未使用过SiteMapProvider。到目前为止,我只能通过编程方式浏览站点结构,并使用默认的组合NavSiteMapProvider PortalItemApprovider将简单的站点地图打印到页面。我认为我需要但不确定如何做的是:

  • 获取/构建部分站点地图数据结构,其中根节点是当前页面的父节点。如果需要,这可以是我自己的数据结构内置代码。我想把它绑定到一个菜单控件。此外,我希望根菜单项具有自定义文本,如“Change Class”,而不是Semest1
从那里,我想我可以使用菜单事件来处理导航。如果我在Semester1/Class Group 1/Class 1/Page2.aspx上,UserControl的菜单示例:

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

我怎样才能完成上面的项目?

我没有发现任何优雅的东西。最后,我将asp.net菜单绑定到CombinedNavSiteMapProvider,然后在数据绑定事件处理程序中,在代码中修改菜单项。我插入一个根“Change Class”项,然后使用一个小的递归方法将任何具有子菜单项的IsSelectable设置为false