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 , представляющее страницу, определяемую rawURLпользователем; в противном случае , nullесли соответствующее значение не SiteMapNode найдено или если включена обрезка безопасности, и SiteMapNode не может быть возвращено текущему пользователю.

Примеры

В следующем примере кода показано, как реализовать метод в классе, реализующего абстрактный FindSiteMapNodeSiteMapProvider класс. Использует 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 , представляющее запрошенную в данный момент страницу; в противном случае, nullесли в контексте страницы нет соответствующего SiteMapNodeSiteMapNode значения null.

Комментарии

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

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

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

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