SiteMapProvider.FindSiteMapNode 方法

定义

当在派生类中被重写时,将检索表示某个页的 SiteMapNode 对象。

重载

FindSiteMapNode(String)

当在派生类中被重写时,将检索表示位于指定 URL 的页的 SiteMapNode 对象。

FindSiteMapNode(HttpContext)

使用指定的 SiteMapNode 对象检索表示当前请求页的 HttpContext 对象。

FindSiteMapNode(String)

当在派生类中被重写时,将检索表示位于指定 URL 的页的 SiteMapNode 对象。

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

标识要为其检索 SiteMapNode 的页的 URL。

返回

SiteMapNode

表示由 rawURL 标识的页的 SiteMapNode;如果未找到对应的 SiteMapNode,或者如果启用了安全修整并且不能为当前用户返回 SiteMapNode,则为 null

示例

下面的代码示例演示如何在实现抽象SiteMapProvider类的类中实现FindSiteMapNode方法。 使用 SimpleTextSiteMapProvider 名为“帮助 FindUrl程序”方法从 HttpContext 对象中获取当前显示页面的 URL。

此代码示例是为类提供的大型示例的 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。 它也可能是使用应用程序相对语法的 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

用于使节点信息与被请求页的 URL 匹配的 HttpContext

返回

SiteMapNode

表示当前请求页的 SiteMapNode;如果在 SiteMapNode 中未找到对应的 SiteMapNode,或者页上下文为 null,则为 null

注解

该方法 FindSiteMapNode 调用抽象 FindSiteMapNode 方法,以根据请求的原始 URL 或请求的虚拟路径检索 SiteMapNode 当前请求页面的对象。 If no corresponding SiteMapNode is found in the SiteMap, null is returned.

默认情况下,该方法 FindSiteMapNode 不会检查用户是否 SiteMapNode 可访问。

另请参阅

适用于