Прочитать на английском

Поделиться через


SiteMapProvider.GetChildNodes(SiteMapNode) Метод

Определение

Во время переопределения в производном классе получает дочерние узлы указанного объекта SiteMapNode.

public abstract System.Web.SiteMapNodeCollection GetChildNodes(System.Web.SiteMapNode node);

Параметры

node
SiteMapNode

Объект SiteMapNode, для которого нужно извлечь все дочерние узлы.

Возвращаемое значение

Доступный только для чтения объект SiteMapNodeCollection, содержащий непосредственные дочерние узлы указанного объекта SiteMapNode; в противном случае — значение null или пустая коллекция, если дочерние узлы не существуют.

Примеры

В следующем примере кода показано, как реализовать GetChildNodes метод в классе, реализуемом абстрактный SiteMapProvider класс. Хранит иерархические связи "родители-потомки" в одном Hashtable объекте SimpleTextSiteMapProvider и все SiteMapNode объекты в другом. Метод GetChildNodes выполняет обратный просмотр с использованием обоих ArrayList объектов.

Этот пример входит в состав более крупного примера использования класса SiteMapProvider.

// Implement the GetChildNodes method.
public override SiteMapNodeCollection GetChildNodes(SiteMapNode node)
{
  SiteMapNodeCollection children = new SiteMapNodeCollection();
  // Iterate through the ArrayList and find all nodes that have the specified node as a parent.
  lock (this)
  {
    for (int i = 0; i < childParentRelationship.Count; i++)
    {

      string nodeUrl = ((DictionaryEntry)childParentRelationship[i]).Key as string;

      SiteMapNode parent = GetNode(childParentRelationship, nodeUrl);

      if (parent != null && node.Url == parent.Url)
      {
        // The SiteMapNode with the Url that corresponds to nodeUrl
        // is a child of the specified node. Get the SiteMapNode for
        // the nodeUrl.
        SiteMapNode child = FindSiteMapNode(nodeUrl);
        if (child != null)
        {
          children.Add(child as SiteMapNode);
        }
        else
        {
          throw new Exception("ArrayLists not in sync.");
        }
      }
    }
  }
  return children;
}
protected override SiteMapNode GetRootNodeCore()
{
  return RootNode;
}
// Implement the GetParentNode method.
public override SiteMapNode GetParentNode(SiteMapNode node)
{
  // Check the childParentRelationship table and find the parent of the current node.
  // If there is no parent, the current node is the RootNode.
  SiteMapNode parent = null;
  lock (this)
  {
    // Get the Value of the node in childParentRelationship
    parent = GetNode(childParentRelationship, node.Url);
  }
  return parent;
}

Комментарии

Классы, производные от класса , SiteMapProvider должны реализовывать абстрактный GetChildNodes метод .

Примечания для тех, кто реализует этот метод

При переопределении GetChildNodes(SiteMapNode) метода в производном классе обязательно выполните обрезку безопасности на дочерних узлах и убедитесь, что возвращаемая коллекция доступна только для чтения. Коллекция содержит только непосредственные дочерние элементы указанного nodeобъекта .

Применяется к

Продукт Версии
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

См. также раздел