SiteMapProvider.FindSiteMapNode Метод

Определение

Во время переопределения в производном классе получается объект SiteMapNode, представляющий страницу.

Перегрузки

FindSiteMapNode(String)

Во время переопределения в производном классе получается объект SiteMapNode, представляющий страницу в указанном URL-адресе.

FindSiteMapNode(HttpContext)

Представляет объект SiteMapNode, представляющий запрашиваемую в настоящий момент страницу с использованием указанного объекта HttpContext.

FindSiteMapNode(String)

Во время переопределения в производном классе получается объект SiteMapNode, представляющий страницу в указанном URL-адресе.

public:
 abstract System::Web::SiteMapNode ^ FindSiteMapNode(System::String ^ rawUrl);
public abstract System.Web.SiteMapNode FindSiteMapNode (string rawUrl);
abstract member FindSiteMapNode : string -> System.Web.SiteMapNode
Public MustOverride Function FindSiteMapNode (rawUrl As String) As SiteMapNode

Параметры

rawUrl
String

URL-адрес, определяющий страницу, для которой необходимо извлечь SiteMapNode.

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

SiteMapNode

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

Примеры

В следующем примере кода показано, как реализовать FindSiteMapNode метод в классе, который реализует абстрактный SiteMapProvider класс. Использует SimpleTextSiteMapProvider вспомогательный метод с именем FindUrl, чтобы получить URL-адрес отображаемой страницы из HttpContext объекта.

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

// Implement the FindSiteMapNode method.
public override SiteMapNode FindSiteMapNode(string rawUrl)
{

  // Does the root node match the URL?
  if (RootNode.Url == rawUrl)
  {
    return RootNode;
  }
  else
  {
    SiteMapNode candidate = null;
    // Retrieve the SiteMapNode that matches the URL.
    lock (this)
    {
      candidate = GetNode(siteMapNodes, rawUrl);
    }
    return candidate;
  }
}
' Implement the FindSiteMapNode method.
Public Overrides Function FindSiteMapNode(ByVal rawUrl As String) As SiteMapNode
  ' Does the root node match the URL?
  If RootNode.Url = rawUrl Then
    Return RootNode
  Else
    Dim candidate As SiteMapNode = Nothing
    ' Retrieve the SiteMapNode that matches the URL.
    SyncLock Me
      candidate = GetNode(siteMapNodes, rawUrl)
    End SyncLock
    Return candidate
  End If
End Function 'FindSiteMapNode
private SiteMapNode GetNode(ArrayList list, string url)
{
  for (int i = 0; i < list.Count; i++)
  {
    DictionaryEntry item = (DictionaryEntry)list[i];
    if ((string)item.Key == url)
      return item.Value as SiteMapNode;
  }
  return null;
}

// Get the URL of the currently displayed page.
private string FindCurrentUrl()
{
  try
  {
    // The current HttpContext.
    HttpContext currentContext = HttpContext.Current;
    if (currentContext != null)
    {
      return currentContext.Request.RawUrl;
    }
    else
    {
      throw new Exception("HttpContext.Current is Invalid");
    }
  }
  catch (Exception e)
  {
    throw new NotSupportedException("This provider requires a valid context.",e);
  }
}
Private Function GetNode(ByVal list As ArrayList, ByVal url As String) As SiteMapNode
  Dim i As Integer
  For i = 0 To list.Count - 1
    Dim item As DictionaryEntry = CType(list(i), DictionaryEntry)
    If CStr(item.Key) = url Then
      Return CType(item.Value, SiteMapNode)
    End If
  Next i
  Return Nothing
End Function 'GetNode


' Get the URL of the currently displayed page.
Private Function FindCurrentUrl() As String
  Try
    ' The current HttpContext.
    Dim currentContext As HttpContext = HttpContext.Current
    If Not (currentContext Is Nothing) Then
      Return currentContext.Request.RawUrl
    Else
      Throw New Exception("HttpContext.Current is Invalid")
    End If
  Catch e As Exception
    Throw New NotSupportedException("This provider requires a valid context.", e)
  End Try
End Function 'FindCurrentUrl

Комментарии

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

Предоставленный URL-адрес может быть виртуальным или абсолютным URL-адресом. Это также может быть URL-адрес, использующий синтаксис, связанный с приложением, например ~/apprelativedirectory. Убедитесь, что любая реализация FindSiteMapNode метода анализирует и правильно обрабатывает синтаксис, связанный с приложением.

КлассXmlSiteMapProvider, который является поставщиком карты сайта по умолчанию для ASP.NET, использует URL-адрес SiteMapNode объекта в качестве ключа в различных коллекциях, которые поддерживаются классами. Таким образом, если SiteMapNode предоставляется URL-адрес, он должен быть уникальным в пределах области поставщика карты сайта. Если URL-адрес не указан, создается уникальный идентификатор для идентификации SiteMapNode.

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

При переопределении FindSiteMapNode(String) метода в производном классе обязательно расширьте поиск до любых дочерних поставщиков, если SiteMapNode объект, соответствующий URL-адресу, не найден поставщиком на текущей карте сайта и поставщик поддерживает дочерние поставщики.

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

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

FindSiteMapNode(HttpContext)

Представляет объект SiteMapNode, представляющий запрашиваемую в настоящий момент страницу с использованием указанного объекта HttpContext.

public:
 virtual System::Web::SiteMapNode ^ FindSiteMapNode(System::Web::HttpContext ^ context);
public virtual System.Web.SiteMapNode FindSiteMapNode (System.Web.HttpContext context);
abstract member FindSiteMapNode : System.Web.HttpContext -> System.Web.SiteMapNode
override this.FindSiteMapNode : System.Web.HttpContext -> System.Web.SiteMapNode
Public Overridable Function FindSiteMapNode (context As HttpContext) As SiteMapNode

Параметры

context
HttpContext

Объект HttpContext используется для сопоставления сведений об узле с URL-адресом запрошенной страницы.

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

SiteMapNode

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

Комментарии

Метод FindSiteMapNode вызывает абстрактный FindSiteMapNode метод для получения SiteMapNode объекта для запрашиваемой страницы на основе необработанного URL-адреса или виртуального пути запроса. Если соответствующий SiteMapNode объект не найден в объекте SiteMap, null возвращается.

Метод FindSiteMapNode не проверяет, доступен ли SiteMapNode объект пользователю по умолчанию.

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

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