向顶部链接栏中添加链接

上次修改时间: 2010年11月1日

适用范围: SharePoint Foundation 2010

在 Microsoft SharePoint Foundation 网站上,顶部链接栏是仅显示在网站的标题和说明之下的选项卡式条带。SharePoint Foundation 对象模型将顶部链接栏的导航结构表示为 SPNavigationNode 对象的集合。您可以通过向顶部链接栏的集合中添加 SPNavigationNode 对象来添加链接。

如何添加链接

网站的顶部链接栏由 SPNavigationNodeCollection 类的实例表示。获取该集合的方法是访问网站的 SPWeb.Navigation 属性以返回 SPNavigation 对象,然后访问该对象的 TopNavigationBar 属性。

SPNavigationNodeCollection topnav = web.Navigation.TopNavigationBar;
Dim topnav As SPNavigationNodeCollection = web.Navigation.TopNavigationBar
警告注释警告

如果网站配置为使用来自其父网站的顶部链接栏,则其 SPWeb.Navigation.TopNavigationBar 属性返回 null。

在获取集合后,您可以构造 SPNavigationNode 对象来表示新链接,然后调用 SPNavigationNodeCollection 类的方法将节点添加到顶部链接栏中。

将链接添加到顶部链接栏中

  1. 检查 SPWeb.Navigation.UseShared 属性的值,以确保网站具有自己的顶部链接栏,并且没有从父网站继承链接。

    如果 UseShared 返回 false,则网站具有自己的顶部链接栏,您可以向其中添加链接。如果该属性返回 true,则网站使用其父网站的顶部链接栏。在这种情况下,您可以将链接添加到父网站的顶部链接栏中,也可以选择将链接放到子网站的"快速启动"菜单上。

  2. 检查重复链接。

    一种检查方法是调用 SPWeb.Navigation.GetNodeByUrl 方法,将建议的链接的 URL 作为参数传递。如果未找到具有该 URL 的链接,GetNodeByUrl 方法将返回 null。

    如果找到了链接,该方法将返回 SPNavigationNode 对象。不过,现有链接可能位于"快速启动"菜单上而不在顶部链接栏上。若要验证现有链接是否属于顶部链接栏,请检查返回的节点的 ParentId 属性。顶部链接栏的 Id 始终为 1002。

  3. 如果顶部链接栏尚不包含该链接,请使用 SPNavigationNode 类的构造函数之一来为它创建导航节点。

    该类具有两个构造函数:

    • 第一个构造函数接受两个参数:包含链接的显示文本的字符串以及包含链接应解析的 URL 的另一个字符串。仅对内部链接(指向相同网站集中的内容的链接)使用此构造函数。URL 应相对于服务器。

    • 第二个构造函数接受三个参数。前两个参数与另一个构造函数的相同。第三个参数是指示链接是外部链接还是内部链接的 boolean 值。可为指向外部网站的链接传递 true,并在第二个参数中传递绝对 URL。如果链接是内部链接,请传递 false 和相对于服务器的 URL。

  4. 通过获取 SPWeb.Navigation.TopNavigationBar 属性的值来获取对表示顶部链接栏的 SPNavigationNodeCollection 对象的引用。

  5. 调用 SPNavigationNodeCollection 类的方法来将节点添加到集合中。

    若要使节点成为栏中的第一个节点,请调用 AddAsFirst 方法。若要使它成为最后一个节点,请调用 AddAsLast 方法。若要将它插入另一个节点之后,请调用 Add 方法。

备注

仅在将 SPNavigationNode 对象添加到集合中后它才会完全初始化。如果该对象还不是集合的成员,只读属性(例如 IdParentId)将返回 null。

示例

以下示例中的控制台应用程序循环访问网站集中的网站的集合,将指向每个网站的链接添加到集合的根网站的顶部链接栏中。在添加链接之前,应用程序会检查现有链接。

using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Navigation;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("https://localhost"))
            using (SPWeb web = site.OpenWeb())
            {
                if (web.Navigation.UseShared) 
                    return; 

                // Get the top link bar.
                SPNavigationNodeCollection topnav = web.Navigation.TopNavigationBar;

                // Iterate over the collection of subsites.
                foreach (SPWeb subweb in web.Webs)
                {
                    // Check for an existing link.
                    SPNavigationNode node = web.Navigation.GetNodeByUrl(subweb.ServerRelativeUrl);
                    if (node == null || node.ParentId != 1002)
                    {
                        // No link, so add one.

                        // Truncate a long title.
                        string linkTitle = subweb.Title;
                        if (linkTitle.Length > 15)
                            linkTitle = linkTitle.Substring(0, 12) + "...";

                        // Create the link.
                        node = new SPNavigationNode(linkTitle, subweb.ServerRelativeUrl);

                        // Add it to the top link bar.
                        node = topnav.AddAsLast(node);
                    }
                    subweb.Dispose();
                }
            }
            Console.Write("\nPress ENTER to continue....");
            Console.ReadLine();
        }
    }
}
Imports System
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.Navigation

Module ConsoleApp

    Sub Main()

        Using site As New SPSite("https://localhost")
            Using web As SPWeb = site.OpenWeb()

                If web.Navigation.UseShared Then
                    Return
                End If

                ' Get the top link bar.
                Dim topnav As SPNavigationNodeCollection = web.Navigation.TopNavigationBar

                ' Iterate over the collection of subsites.
                For Each subweb As SPWeb In web.Webs
                    ' Check for an existing link.
                    Dim node As SPNavigationNode = web.Navigation.GetNodeByUrl(subweb.ServerRelativeUrl)
                    If node Is Nothing OrElse node.ParentId <> 1002 Then

                        ' No link, so add one.

                        ' Truncate a long title.
                        Dim linkTitle As String = subweb.Title
                        If linkTitle.Length > 15 Then
                            linkTitle = linkTitle.Substring(0, 12) + "..."
                        End If

                        ' Create the link.
                        node = New SPNavigationNode(linkTitle, subweb.ServerRelativeUrl)

                        ' Add it to the top link bar.
                        node = topnav.AddAsLast(node)
                    End If
                    subweb.Dispose()
                Next

            End Using
        End Using

        Console.Write(vbCrLf & "Press ENTER to continue....")
        Console.Read()
    End Sub

End Module

请参阅

任务

如何:向顶部链接栏或快速启动菜单添加子网站

概念

如何:共享网站之间的顶部链接栏

如何:自定义顶部链接栏的显示