自定义SharePoint 2007子站点导航控件

时间:2012-07-19 19:06:46

标签: c# sharepoint-2007 navigation sitemapprovider

我被要求创建一个asp.net UserControl,允许在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将简单的站点地图打印到页面。我认为我需要但不确定该怎么做:

  • 获取/构建部分站点地图数据结构,其中根节点是当前页面的父学期。如果需要,这可以是我自己的代码内置数据结构。我想将它绑定到菜单控件。另外,我希望根菜单项具有自定义文本,例如“Change Class”而不是Semester1。

从那里开始,我想我可以使用菜单事件来处理导航。如果我在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

如何完成上面的项目符号项目?

1 个答案:

答案 0 :(得分:0)

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