SiteMapNode 类

定义

表示分层站点地图结构中的节点,例如 SiteMap 类和实现抽象 SiteMapProvider 类的类所描述的节点。

public ref class SiteMapNode : ICloneable, System::Web::UI::IHierarchyData, System::Web::UI::INavigateUIData
public class SiteMapNode : ICloneable, System.Web.UI.IHierarchyData, System.Web.UI.INavigateUIData
type SiteMapNode = class
    interface ICloneable
    interface IHierarchyData
    interface INavigateUIData
Public Class SiteMapNode
Implements ICloneable, IHierarchyData, INavigateUIData
继承
SiteMapNode
实现

示例

本部分包含两个代码示例。 第一个代码示例演示如何创建新的站点地图节点集合并向其添加元素。 第二个代码示例演示如何从文本文件加载站点地图数据。

下面的代码示例演示如何使用 SiteMapNodeCollection 构造函数创建新 SiteMapNodeCollection 集合,然后使用 方法向其 Add 添加元素。

// The LoadSiteMapData() method loads site navigation
// data from persistent storage into a DataTable.
DataTable siteMap = LoadSiteMapData();

// Create a SiteMapNodeCollection.
SiteMapNodeCollection nodes = new SiteMapNodeCollection();

// Create a SiteMapNode and add it to the collection.
SiteMapNode tempNode;
DataRow row;
int index = 0;

while (index < siteMap.Rows.Count)
{

    row = siteMap.Rows[index];

    // Create a node based on the data in the DataRow.
    tempNode = new SiteMapNode(SiteMap.Provider,
                                row["Key"].ToString(),
                                row["Url"].ToString());

    // Add the node to the collection.
    nodes.Add(tempNode);
    ++index;
}
' The LoadSiteMapData() Function loads site navigation
' data from persistent storage into a DataTable.

Dim siteMapData As DataTable
siteMapData = LoadSiteMapData()

' Create a SiteMapNodeCollection.
Dim nodes As New SiteMapNodeCollection()

' Create a SiteMapNode and add it to the collection.
Dim tempNode As SiteMapNode
Dim row As DataRow
Dim index As Integer
index = 0

While (index < siteMapData.Rows.Count)

    row = siteMapData.Rows(index)

    ' Create a node based on the data in the DataRow.
    tempNode = New SiteMapNode(SiteMap.Provider, row("Key").ToString(), row("Url").ToString())

    ' Add the node to the collection.
    nodes.Add(tempNode)
    index = index + 1
End While

下面的代码示例演示 如何 SimpleTextSiteMapProvider 分析包含以逗号分隔的字符串格式的站点地图数据的文本文件。 对于从文件读取的每一行,将一个新的 SiteMapNode 对象添加到 类的内部跟踪集合中。

此代码示例是为 SiteMapProvider 类提供的一个更大示例的一部分。

protected virtual void LoadSiteMapFromStore()
{
  string pathToOpen;

  lock (this)
  {
    // If a root node exists, LoadSiteMapFromStore has already
    // been called, and the method can return.
    if (rootNode != null)
    {
      return;
    }
    else
    {
      pathToOpen = HttpContext.Current.Server.MapPath("~" + "\\" + sourceFilename);

      if (File.Exists(pathToOpen))
      {
        // Open the file to read from.
        using (StreamReader sr = File.OpenText(pathToOpen))
        {

          // Clear the state of the collections and rootNode
          rootNode = null;
          siteMapNodes.Clear();
          childParentRelationship.Clear();

          // Parse the file and build the site map
          string s = "";
          string[] nodeValues = null;
          SiteMapNode temp = null;

          while ((s = sr.ReadLine()) != null)
          {

            // Build the various SiteMapNode objects and add
            // them to the ArrayList collections. The format used
            // is: URL,TITLE,DESCRIPTION,PARENTURL

            nodeValues = s.Split(',');

            temp = new SiteMapNode(this,
                HttpRuntime.AppDomainAppVirtualPath + "/" + nodeValues[0],
                HttpRuntime.AppDomainAppVirtualPath + "/" + nodeValues[0],
                nodeValues[1],
                nodeValues[2]);

            // Is this a root node yet?
            if (null == rootNode &&
                string.IsNullOrEmpty(nodeValues[3]))
            {
              rootNode = temp;
            }

          // If not the root node, add the node to the various collections.
            else
            {
              siteMapNodes.Add(new DictionaryEntry(temp.Url, temp));
              // The parent node has already been added to the collection.
              SiteMapNode parentNode =
                       FindSiteMapNode(HttpRuntime.AppDomainAppVirtualPath + "/" + nodeValues[3]);
              if (parentNode != null)
              {
                childParentRelationship.Add(new DictionaryEntry(temp.Url, parentNode));
              }
              else
              {
                throw new Exception("Parent node not found for current node.");
              }
            }
          }
        }
      }
      else
      {
        throw new Exception("File not found");
      }
    }
  }
  return;
}
  Protected Overridable Sub LoadSiteMapFromStore()
    Dim pathToOpen As String
    SyncLock Me
      ' If a root node exists, LoadSiteMapFromStore has already
      ' been called, and the method can return.
      If Not (aRootNode Is Nothing) Then
        Return
      Else
        pathToOpen = HttpContext.Current.Server.MapPath("~" & "\\" & sourceFilename)
        If File.Exists(pathToOpen) Then
          ' Open the file to read from.
          Dim sr As StreamReader = File.OpenText(pathToOpen)
          Try

            ' Clear the state of the collections and aRootNode
            aRootNode = Nothing
            siteMapNodes.Clear()
            childParentRelationship.Clear()

            ' Parse the file and build the site map
            Dim s As String = ""
            Dim nodeValues As String() = Nothing
            Dim temp As SiteMapNode = Nothing

            Do
              s = sr.ReadLine()

              If Not s Is Nothing Then
                ' Build the various SiteMapNode objects and add
                ' them to the ArrayList collections. The format used
                ' is: URL,TITLE,DESCRIPTION,PARENTURL
                nodeValues = s.Split(","c)

                temp = New SiteMapNode(Me, _
                    HttpRuntime.AppDomainAppVirtualPath & "/" & nodeValues(0), _
                    HttpRuntime.AppDomainAppVirtualPath & "/" & nodeValues(0), _
                    nodeValues(1), _
                    nodeValues(2))

                ' Is this a root node yet?
                If aRootNode Is Nothing AndAlso _
                  (nodeValues(3) Is Nothing OrElse _
                   nodeValues(3) = String.Empty) Then
                  aRootNode = temp

                  ' If not the root node, add the node to the various collections.
                Else

                  siteMapNodes.Add(New DictionaryEntry(temp.Url, temp))

                  ' The parent node has already been added to the collection.
                  Dim parentNode As SiteMapNode = _
                      FindSiteMapNode(HttpRuntime.AppDomainAppVirtualPath & "/" & nodeValues(3))

                  If Not (parentNode Is Nothing) Then
                    childParentRelationship.Add(New DictionaryEntry(temp.Url, parentNode))
                  Else
                    Throw New Exception("Parent node not found for current node.")
                  End If
                End If
              End If
            Loop Until s Is Nothing
          Finally
            sr.Close()
          End Try
        Else
          Throw New Exception("File not found")
        End If
      End If
    End SyncLock
    Return
  End Sub
End Class

注解

对象 SiteMapNode 表示网站地图结构中的网站页。 SiteMapNode 对象在运行时由静态 SiteMap 类使用一个或多个站点地图提供程序加载,以将站点地图数据从永久性存储加载到内存中。 SiteMapNode 对象由 SiteMapNodeItem 类包装,供 Web 服务器控件(如 SiteMapPath 控件)使用。

SiteMapNode 包括用于描述网站中单个页面的多个属性,包括描述页面的属性,如 UrlTitleDescription 属性。 Url虽然 属性由 XmlSiteMapProvider 类(ASP.NET 的默认站点地图提供程序)使用,作为提供程序用于跟踪节点的内部集合中的查找键,SiteMapNode但 类支持站点地图提供程序可用于跟踪节点的基本Key属性。 此外, Url 导航控件使用 属性来呈现指向导航结构中的页面的超链接。 属性 Title 是 的 SiteMapNode友好名称,通常与 Web 窗体的 HTML 标题相同,导航控件使用它来呈现简单标签。 最后, NameValueCollection 其他 Attributes 属性的集合可供使用 SiteMapNode 对象的站点地图提供程序使用,但需要基 SiteMapNode 类中不可用的其他属性。

构造函数

SiteMapNode(SiteMapProvider, String)

使用指定的 key 和站点地图提供程序对 SiteMapNode 类的新实例进行初始化,其中,前者用于标识该节点代表的页,后者用于管理该节点。

SiteMapNode(SiteMapProvider, String, String)

使用以下三项对 SiteMapNode 类的新实例进行初始化:一是指定的 URL;二是一个 key,用于标识节点所代表的页;三是站点地图提供程序,用于管理节点。

SiteMapNode(SiteMapProvider, String, String, String)

使用以下四项对 SiteMapNode 类的新实例进行初始化:一是指定的 URL;二是一个 key,用于标识节点所代表的页;三是一个标题;四是站点地图提供程序,用于管理节点。

SiteMapNode(SiteMapProvider, String, String, String, String)

使用以下四项对 SiteMapNode 类的新实例进行初始化:一是指定的 URL;二是一个 key,用于标识节点所代表的页;三是标题和说明;四是站点地图提供程序,用于管理节点。

SiteMapNode(SiteMapProvider, String, String, String, String, IList, NameValueCollection, NameValueCollection, String)

使用管理该节点的指定站点地图提供程序、URL、标题、描述、角色、附加特性以及用于本地化的显式和隐式的资源键来初始化 SiteMapNode 类的新实例。

属性

Attributes

除了为 SiteMapNode 类定义的强类型属性以外,获取或设置附加特性的集合。

ChildNodes

获取或设置来自关联的SiteMapProvider 提供程序的当前 SiteMapNode 对象的所有子节点。

Description

获取或设置 SiteMapNode 的说明。

HasChildNodes

获取一个值,它指示当前 SiteMapNode 是否具有子节点。

Item[String]

根据指定的键获取或设置一个来自 Attributes 集合的自定义特性或资源字符串。

Key

获取一个字符串,该字符串表示站点地图节点的查找键。

NextSibling

获取与当前节点位于相同层级、相对于 ParentNode 属性的下一个 SiteMapNode 节点(如果存在)。

ParentNode

获取或设置作为当前节点的父节点的 SiteMapNode 对象。

PreviousSibling

获取与当前节点位于相同层级、相对于 ParentNode 对象的前一个 SiteMapNode 对象(如果存在)。

Provider

获取跟踪 SiteMapNode 对象的 SiteMapProvider 提供程序。

ReadOnly

获取或设置一个值,该值指示是否可以修改站点地图节点。

ResourceKey

获取或设置用于本地化 SiteMapNode 的资源键。

Roles

获取或设置与 SiteMapNode 对象关联的角色集合,这些角色用于安全修整期间。

RootNode

获取站点地图提供程序层次结构中的根提供程序的根节点。 如果不存在提供程序层次结构,则 RootNode 属性将获取当前提供程序的根节点。

Title

获取或设置 SiteMapNode 对象的标题。

Url

获取或设置 SiteMapNode 对象所代表的页的 URL。

方法

Clone()

创建作为当前节点副本的新节点。

Clone(Boolean)

创建作为当前节点的副本的新副本,并根据需要克隆当前节点的所有父节点和祖先节点。

Equals(Object)

获取一个值,该值指示当前的 SiteMapNode 是否与指定对象相同。

GetAllNodes()

检索属于调用节点的子代的所有 SiteMapNode 对象的只读集合,而不管分离程度如何。

GetDataSourceView(SiteMapDataSource, String)

检索与当前节点关联的 SiteMapDataSourceView 对象。

GetExplicitResourceString(String, String, Boolean)

检索本地化的字符串,此方法基于以下三个参数:要本地化的 SiteMapNode 特性,未找到资源时使用的默认字符串,以及指示在未找到资源时是否引发异常的布尔值。

GetHashCode()

返回 SiteMapNode 对象的哈希代码。

GetHierarchicalDataSourceView()

检索与当前节点关联的 SiteMapHierarchicalDataSourceView 对象。

GetImplicitResourceString(String)

获取一个本地化的字符串,此方法基于以下信息:跟踪 SiteMapNodeSiteMapProvider 所指定的特性名称和 ResourceKey 属性。

GetType()

获取当前实例的 Type

(继承自 Object)
IsAccessibleToUser(HttpContext)

获取一个值,该值指示指定的站点地图节点是否可由用户在指定的上下文中查看。

IsDescendantOf(SiteMapNode)

获取一个值,该值指示当前站点地图节点是否为指定节点的子节点或直接子代节点。

MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
ToString()

SiteMapNode 类的此实例的值转换为其等效的字符串表示形式。

显式接口实现

ICloneable.Clone()

创建作为当前节点副本的新节点。 有关此成员的说明,请参见 Clone()

IHierarchyData.GetChildren()

检索当前项的分层子数据项。 有关此成员的说明,请参见 GetChildren()

IHierarchyData.GetParent()

检索当前项的分层父级。 有关此成员的说明,请参见 GetParent()

IHierarchyData.HasChildren

获取一个值,该值指示当前 SiteMapNode 对象是否具有任何子节点。 有关此成员的说明,请参见 HasChildren

IHierarchyData.Item

获取分层数据项。 有关此成员的说明,请参见 Item

IHierarchyData.Path

获取分层数据项的路径。 有关此成员的说明,请参见 Path

IHierarchyData.Type

获取表示分层数据项的类型名称的字符串。 有关此成员的说明,请参见 Type

INavigateUIData.Description

获取站点地图节点的 Description 属性。 有关此成员的说明,请参见 Description

INavigateUIData.Name

获取站点地图节点的 Title 属性。 有关此成员的说明,请参见 Name

INavigateUIData.NavigateUrl

获取站点地图节点的 Url 属性。 有关此成员的说明,请参见 NavigateUrl

INavigateUIData.Value

获取站点地图节点的 Title 属性。 有关此成员的说明,请参见 Value

适用于

另请参阅