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 не может быть возвращен для текущего пользователя.
Примеры
В следующем примере кода показано, как реализовать 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, представляющий запрашиваемую в данный момент страницу; в противном случае — значение null
, если соответствующий объект SiteMapNode не найден в SiteMapNode или если содержимое страницы имеет значение null
.
Комментарии
Метод FindSiteMapNode вызывает абстрактный FindSiteMapNode метод для получения SiteMapNode объекта для запрашиваемой страницы на основе необработанного URL-адреса или виртуального пути запроса. Если соответствующий SiteMapNode объект не найден в объекте SiteMap, null
возвращается.
Метод FindSiteMapNode не проверяет, доступен ли SiteMapNode объект пользователю по умолчанию.