Udostępnij za pośrednictwem


SiteMapProvider.FindSiteMapNode Metoda

Definicja

Po zastąpieniu w klasie pochodnej pobiera SiteMapNode obiekt reprezentujący stronę.

Przeciążenia

FindSiteMapNode(String)

Po zastąpieniu w klasie pochodnej pobiera SiteMapNode obiekt reprezentujący stronę pod określonym adresem URL.

FindSiteMapNode(HttpContext)

SiteMapNode Pobiera obiekt reprezentujący aktualnie żądaną stronę przy użyciu określonego HttpContext obiektu.

FindSiteMapNode(String)

Po zastąpieniu w klasie pochodnej pobiera SiteMapNode obiekt reprezentujący stronę pod określonym adresem 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

Parametry

rawUrl
String

Adres URL identyfikujący stronę, dla której ma być pobierany SiteMapNodeelement .

Zwraca

SiteMapNode

Element SiteMapNode reprezentujący stronę zidentyfikowaną przez rawURLelement ; w przeciwnym razie , nulljeśli nie zostanie znaleziony odpowiedni SiteMapNode lub jeśli nie włączono przycinania zabezpieczeń i SiteMapNode nie można go zwrócić dla bieżącego użytkownika.

Przykłady

Poniższy przykład kodu pokazuje, jak zaimplementować metodę FindSiteMapNode w klasie, która implementuje klasę abstrakcyjną SiteMapProvider . Metoda SimpleTextSiteMapProvider pomocnika używa metody o nazwie FindUrl, aby uzyskać adres URL aktualnie wyświetlanej HttpContext strony z obiektu.

Ten przykład kodu jest częścią większego przykładu podanego SiteMapProvider dla klasy.

// 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

Uwagi

Klasy pochodzące z SiteMapProvider klasy muszą implementować metodę abstrakcyjną FindSiteMapNode .

Podany adres URL może być adresem URL wirtualnym lub bezwzględnym. Może to być również adres URL, który używa składni względnej aplikacji, na przykład ~/apprelativedirectory. Upewnij się, że każda implementacja metody analizuje składnię FindSiteMapNode względną aplikacji i obsługuje prawidłową składnię względną aplikacji.

XmlSiteMapProvider Klasa, która jest domyślnym dostawcą mapy witryny dla ASP.NET, używa adresu URL SiteMapNode obiektu jako klucza w różnych kolekcjach, które klasy utrzymują. W związku z tym jeśli adres SiteMapNode URL zawiera adres URL, musi być unikatowy w zakresie dostawcy mapy witryny. Jeśli nie podano żadnego adresu URL, zostanie wygenerowany unikatowy identyfikator w celu zidentyfikowania elementu SiteMapNode.

Uwagi dotyczące implementowania

Podczas zastępowania FindSiteMapNode(String) metody w klasie pochodnej należy rozszerzyć wyszukiwanie na wszystkich dostawców podrzędnych, jeśli SiteMapNode obiekt zgodny z adresem URL nie zostanie znaleziony przez dostawcę w bieżącej mapie witryny, a dostawca obsługuje dostawców podrzędnych.

Zobacz też

Dotyczy

FindSiteMapNode(HttpContext)

SiteMapNode Pobiera obiekt reprezentujący aktualnie żądaną stronę przy użyciu określonego HttpContext obiektu.

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

Parametry

context
HttpContext

Element HttpContext używany do dopasowania informacji o węźle z adresem URL żądanej strony.

Zwraca

SiteMapNode

Element SiteMapNode reprezentujący aktualnie żądaną stronę; w przeciwnym razie , nulljeśli nie można odnaleźć odpowiedniego SiteMapNode elementu w elemecie SiteMapNode lub jeśli kontekst strony to null.

Uwagi

Metoda FindSiteMapNode wywołuje metodę abstrakcyjną FindSiteMapNode SiteMapNode , aby pobrać obiekt dla aktualnie żądanej strony na podstawie nieprzetworzonego adresu URL lub ścieżki wirtualnej żądania. Jeśli w elemecie nie znaleziono odpowiedniego SiteMapNode SiteMapelementu , null zostanie zwrócona wartość .

Metoda FindSiteMapNode nie sprawdza, czy SiteMapNode element jest domyślnie dostępny dla użytkownika.

Zobacz też

Dotyczy