StaticSiteMapProvider Klasa

Definicja

Służy jako częściowa implementacja klasy abstrakcyjnej SiteMapProvider i służy jako klasa bazowa dla XmlSiteMapProvider klasy, która jest domyślnym dostawcą mapy lokacji w ASP.NET.

C#
public abstract class StaticSiteMapProvider : System.Web.SiteMapProvider
Dziedziczenie
StaticSiteMapProvider
Pochodne

Przykłady

Poniższy przykład kodu pokazuje, jak rozszerzyć klasę StaticSiteMapProvider tak, aby korzystała z programu Microsoft Access jako dostawcy mapy witryny. Klasa AccessSiteMapProvider jest dostawcą mapy lokacji, który obsługuje tylko prostą, pojedynczą hierarchię głęboką. Tabela przechowywana przez dane mapy witryny ma następującą strukturę:

NODEID URL            NAME       PARENTNODEID  
 ---------------------------------------------  
 1      default.aspx   Default    <NULL>  
 2      catalog.aspx   Catalog    1  
 3      aboutus.aspx   Contact Us 1  
...  

Klasa AccessSiteMapProvider pochodzi z StaticSiteMapProvider klasy i pobiera informacje z bazy danych programu Microsoft Access przy użyciu podstawowych zapytań SQL i OleDbCommand obiektów i OleDbDataReader .

C#
namespace Samples.AspNet.CS.Controls {

    using System;
    using System.Collections;
    using System.Collections.Specialized;
    using System.Data;
    using System.Data.OleDb;
    using System.Security.Permissions;
    using System.Web;

    /// An extremely simple AccessSiteMapProvider that only supports a
    /// site map node hierarchy 1 level deep.
    [AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)]
    public class AccessSiteMapProvider : StaticSiteMapProvider
    {
        private SiteMapNode rootNode =  null;
        private OleDbConnection accessConnection = null;

        // This string is case sensitive.
        private string AccessConnectionStringName = "accessSiteMapConnectionString";

        // Implement a default constructor.
        public AccessSiteMapProvider () { }

        // Some basic state to help track the initialization state of the provider.
        private bool initialized = false;
        public virtual bool IsInitialized {
            get {
                return initialized;
            }
        }
        // Return the root node of the current site map.
        public override SiteMapNode RootNode {
            get {
                SiteMapNode temp = null;
                temp = BuildSiteMap();
                return temp;
            }
        }
        protected override SiteMapNode GetRootNodeCore() {
            return RootNode;
        }
        // Initialize is used to initialize the properties and any state that the
        // AccessProvider holds, but is not used to build the site map.
        // The site map is built when the BuildSiteMap method is called.
        public override void Initialize(string name, NameValueCollection attributes) {
            if (IsInitialized)
                return;

            base.Initialize(name, attributes);

            // Create and test the connection to the Microsoft Access database.

            // Retrieve the Value of the Access connection string from the
            // attributes NameValueCollection.
            string connectionString = attributes[AccessConnectionStringName];

            if (null == connectionString || connectionString.Length == 0)
                throw new Exception ("The connection string was not found.");
            else
                accessConnection = new OleDbConnection(connectionString);

            initialized = true;
        }

        ///
        /// SiteMapProvider and StaticSiteMapProvider methods that this derived class must override.
        ///
        // Clean up any collections or other state that an instance of this may hold.
        protected override void Clear() {
            lock (this) {
                rootNode = null;
                base.Clear();
            }
        }

        // Build an in-memory representation from persistent
        // storage, and return the root node of the site map.
        public override SiteMapNode BuildSiteMap() {

            // Since the SiteMap class is static, make sure that it is
            // not modified while the site map is built.
            lock(this) {

                // If there is no initialization, this method is being
                // called out of order.
                if (!IsInitialized) {
                    throw new Exception("BuildSiteMap called incorrectly.");
                }

                // If there is no root node, then there is no site map.
                if (null == rootNode) {
                    // Start with a clean slate
                    Clear();

                    // Select the root node of the site map from Microsoft Access.
                    int rootNodeId = -1;

                    if (accessConnection.State == ConnectionState.Closed)
                        accessConnection.Open();
                    OleDbCommand rootNodeCommand =
                        new OleDbCommand("SELECT nodeid, url, name FROM SiteMap WHERE parentnodeid IS NULL",
                                         accessConnection);
                    OleDbDataReader rootNodeReader = rootNodeCommand.ExecuteReader();

                    if(rootNodeReader.HasRows) {
                        rootNodeReader.Read();
                        rootNodeId = rootNodeReader.GetInt32(0);
                        // Create a SiteMapNode that references the current StaticSiteMapProvider.
                        rootNode   = new SiteMapNode(this,
                                                     rootNodeId.ToString(),
                                                     rootNodeReader.GetString(1),
                                                     rootNodeReader.GetString(2));
                    }
                    else
                    {
                        return null;
                    }

                    rootNodeReader.Close();
                    // Select the child nodes of the root node.
                    OleDbCommand childNodesCommand =
                        new OleDbCommand("SELECT nodeid, url, name FROM SiteMap WHERE parentnodeid = ?",
                                         accessConnection);
                    OleDbParameter rootParam = new OleDbParameter("parentid", OleDbType.Integer);
                    rootParam.Value = rootNodeId;
                    childNodesCommand.Parameters.Add(rootParam);

                    OleDbDataReader childNodesReader = childNodesCommand.ExecuteReader();

                    if (childNodesReader.HasRows) {

                        SiteMapNode childNode = null;
                        while(childNodesReader.Read()) {
                            childNode =  new SiteMapNode(this,
                                                         childNodesReader.GetInt32(0).ToString(),
                                                         childNodesReader.GetString(1),
                                                         childNodesReader.GetString(2));

                            // Use the SiteMapNode AddNode method to add
                            // the SiteMapNode to the ChildNodes collection.
                            AddNode(childNode, rootNode);
                        }
                    }

                    childNodesReader.Close();
                    accessConnection.Close();
                }
                return rootNode;
            }
        }
    }
}

AccessSiteMapProvider Na koniec parametr jest skonfigurowany jako dostawca domyślny w następującym pliku Web.config.

<configuration>  
  <system.web>  
    <siteMap defaultProvider="AccessSiteMapProvider">  
     <providers>  
       <add   
         name="AccessSiteMapProvider"  
         type="Samples.AspNet.AccessSiteMapProvider,Samples.AspNet "  
         accessSiteMapConnectionString="PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE=sitemap.mdb "/>  
     </providers>   
    </siteMap>  
  </system.web>  
</configuration>  

Uwagi

Klasa StaticSiteMapProvider jest częściową implementacją klasy abstrakcyjnej SiteMapProvider i dostarcza dwie dodatkowe metody: AddNode i RemoveNode, a także metody abstrakcyjne BuildSiteMap i chronione Clear .

Klasa StaticSiteMapProvider obsługuje pisanie dostawcy mapy witryny (na przykład XmlSiteMapProvider), który tłumaczy mapę lokacji przechowywaną w magazynie trwałym na taki, który jest przechowywany w pamięci. Klasa StaticSiteMapProvider udostępnia podstawowe implementacje do przechowywania i pobierania SiteMapNode obiektów.

Klasy SiteMapProvider i StaticSiteMapProvider obsługują koncepcję hierarchii dostawcy mapy lokacji, w której dostawca mapy lokacji może mieć hierarchiczną relację z innymi dostawcami mapy lokacji. Ten wzorzec jest implementowany za pomocą RootProvider właściwości i ParentProvider .

Klasa StaticSiteMapProvider przechowuje swoje SiteMapNode obiekty w tabelach skrótów i wewnętrznie używa SiteMapNode.Url właściwości stron reprezentowanych przez węzły mapy witryny jako klucze. (Jeśli węzeł mapy witryny nie określa adresu URL, jest śledzony przy użyciu automatycznie wygenerowanego unikatowego klucza). W związku z tym nie można mieć węzłów mapy witryny, w których węzeł mapy witryny o tym samym adresie URL jest używany więcej niż raz. Na przykład próba załadowania węzła mapy witryny pokazanego w poniższym przykładzie kodu z XmlSiteMapProvider klasą, która jest domyślnym dostawcą mapy witryny ASP.NET lub dostawcą mapy witryny pochodzącym z StaticSiteMapProvider klasy nie będzie działać, ponieważ strona AboutUs.aspx jest używana więcej niż raz.

<sitemap>  
  <sitemapnode title="Home" description="Home" url="default.aspx" >  
    <sitemapnode title="Catalog" description="Our catalog" url="catalog.aspx"/>  
    <sitemapnode title="About Us" description="All about our company" url="aboutus.aspx"/>  
    <sitemapnode title="Driving Directions" description="Directions to our store" url="aboutus.aspx"/>  
  </sitemapnode>  
</sitemap>  

Jeśli rozszerzasz klasę StaticSiteMapProvider , trzy najważniejsze metody to GetRootNodeCoremetody , Initializei BuildSiteMap . Metody Clear i FindSiteMapNode mają domyślne implementacje, które są wystarczające dla większości niestandardowych implementacji dostawcy mapy lokacji.

Metoda jest wywoływana Initialize w celu zainicjowania pochodnych dostawców map lokacji, w tym wszystkich zasobów wymaganych do załadowania danych mapy lokacji, ale próbuje skompilować węzeł mapy lokacji w pamięci. Jeśli klasa pochodna używa plików do przechowywania danych mapy witryny, w tym miejscu można wykonać dowolną inicjację pliku. Jeśli węzeł mapy lokacji używa innego typu magazynu danych, takiego jak relacyjna baza danych, inicjowanie połączenia może zostać wykonane tutaj. Dodatkowe atrybuty, takie jak nazwy plików lub parametry połączenia umieszczone w elemecie dostawcy mapy lokacji w konfiguracji, są przetwarzane przez system konfiguracji ASP.NET i przekazywane do Initialize metody z parametrem attributes .

Metoda BuildSiteMap musi zostać zastąpiona przez wszystkie klasy, które pochodzą z StaticSiteMapProvider klasy i jest wywoływana w celu załadowania węzła mapy lokacji z magazynu trwałego i przekonwertowania jej na reprezentację wewnętrzną. Metoda BuildSiteMap jest wywoływana wewnętrznie w wielu domyślnych implementacjach składowych StaticSiteMapProvider klas i XmlSiteMapProvider . Jeśli zaimplementujesz własnego dostawcę mapy lokacji, upewnij się, że przetwarzanie danych mapy lokacji odbywa się raz, a kolejne wywołania BuildSiteMap metody są zwracane natychmiast, jeśli informacje o mapie witryny zostały już załadowane. Podczas implementowania BuildSiteMap metody upewnij się, że jest ona bezpieczna wątkiem, ponieważ wiele współbieżnych żądań stron może spowodować pośrednio wiele wywołań w celu załadowania informacji o mapie witryny. Infrastruktura mapy lokacji obsługuje wyświetlanie informacji o mapie witryny na podstawie roli użytkownika. Roles W zależności od właściwości obsługiwanej przez poszczególne SiteMapNode obiekty może istnieć inna struktura nawigacji dla różnych użytkowników. Domyślne implementacje elementów członkowskich StaticSiteMapProvider pobierania węzła mapy witryny klasy wykonują automatyczne przycinanie zabezpieczeń przez wywołanie IsAccessibleToUser metody .

Clear Metody AddNodei RemoveNode manipulują wewnętrznymi kolekcjami, które są używane do śledzenia węzłów mapy witryny w sposób bezpieczny wątkowo.

Uwagi dotyczące implementowania

Po dziedziczeniu StaticSiteMapProvider z klasy należy zastąpić następujący element członkowski: BuildSiteMap().

Konstruktory

StaticSiteMapProvider()

Inicjuje nowe wystąpienie klasy StaticSiteMapProvider.

Właściwości

CurrentNode

SiteMapNode Pobiera obiekt reprezentujący aktualnie żądaną stronę.

(Odziedziczone po SiteMapProvider)
Description

Pobiera krótki, przyjazny opis odpowiedni do wyświetlania w narzędziach administracyjnych lub innych interfejsach użytkownika (UI).

(Odziedziczone po ProviderBase)
EnableLocalization

Pobiera lub ustawia wartość logiczną wskazującą, czy zwracane są zlokalizowane wartości atrybutów SiteMapNode .

(Odziedziczone po SiteMapProvider)
Name

Pobiera przyjazną nazwę używaną do odwoływania się do dostawcy podczas konfiguracji.

(Odziedziczone po ProviderBase)
ParentProvider

Pobiera lub ustawia obiekt nadrzędny SiteMapProvider bieżącego dostawcy.

(Odziedziczone po SiteMapProvider)
ResourceKey

Pobierz lub ustawia klucz zasobu używany do lokalizowania SiteMapNode atrybutów.

(Odziedziczone po SiteMapProvider)
RootNode

Pobiera obiekt główny SiteMapNode danych mapy lokacji reprezentowanych przez bieżącego dostawcę.

(Odziedziczone po SiteMapProvider)
RootProvider

Pobiera obiekt główny SiteMapProvider w bieżącej hierarchii dostawcy.

(Odziedziczone po SiteMapProvider)
SecurityTrimmingEnabled

Pobiera wartość logiczną wskazującą, czy dostawca mapy lokacji filtruje węzły mapy lokacji na podstawie roli użytkownika.

(Odziedziczone po SiteMapProvider)

Metody

AddNode(SiteMapNode, SiteMapNode)

Dodaje obiekt SiteMapNode do kolekcji, które są obsługiwane przez dostawcę mapy witryny i ustanawia relację nadrzędną/podrzędną między SiteMapNode obiektami.

AddNode(SiteMapNode)

SiteMapNode Dodaje obiekt do kolekcji węzłów, która jest utrzymywana przez dostawcę mapy witryny.

(Odziedziczone po SiteMapProvider)
BuildSiteMap()

W przypadku zastąpienia w klasie pochodnej ładuje informacje mapy lokacji z magazynu trwałego i tworzy je w pamięci.

Clear()

Usuwa wszystkie elementy w kolekcjach węzłów podrzędnych i nadrzędnych węzłów mapy lokacji, które śledzą StaticSiteMapProvider w ramach jego stanu.

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
FindSiteMapNode(HttpContext)

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

(Odziedziczone po SiteMapProvider)
FindSiteMapNode(String)

SiteMapNode Pobiera obiekt reprezentujący stronę pod określonym adresem URL.

FindSiteMapNodeFromKey(String)

SiteMapNode Pobiera obiekt na podstawie określonego klucza.

GetChildNodes(SiteMapNode)

Pobiera węzły mapy lokacji podrzędnej określonego SiteMapNode obiektu.

GetCurrentNodeAndHintAncestorNodes(Int32)

Udostępnia zoptymalizowaną metodę wyszukiwania dla dostawców mapy lokacji podczas pobierania węzła dla aktualnie żądanej strony i pobierania węzłów mapy witryny nadrzędnej i węzłów mapy lokacji programu ancestor dla bieżącej strony.

(Odziedziczone po SiteMapProvider)
GetCurrentNodeAndHintNeighborhoodNodes(Int32, Int32)

Udostępnia zoptymalizowaną metodę wyszukiwania dla dostawców mapy lokacji podczas pobierania węzła dla aktualnie żądanej strony i pobierania węzłów mapy lokacji w pobliżu bieżącego węzła.

(Odziedziczone po SiteMapProvider)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetParentNode(SiteMapNode)

Pobiera węzeł mapy lokacji nadrzędnej określonego SiteMapNode obiektu.

GetParentNodeRelativeToCurrentNodeAndHintDownFromParent(Int32, Int32)

Udostępnia zoptymalizowaną metodę wyszukiwania dla dostawców mapy lokacji podczas pobierania węzła ancestor dla aktualnie żądanej strony i pobierania węzłów podrzędnych dla obiektu ancestor.

(Odziedziczone po SiteMapProvider)
GetParentNodeRelativeToNodeAndHintDownFromParent(SiteMapNode, Int32, Int32)

Udostępnia zoptymalizowaną metodę wyszukiwania dla dostawców map lokacji podczas pobierania węzła podrzędnego dla określonego SiteMapNode obiektu i pobierania jego węzłów podrzędnych.

(Odziedziczone po SiteMapProvider)
GetRootNodeCore()

Po zastąpieniu w klasie pochodnej pobiera węzeł główny wszystkich węzłów, które są obecnie zarządzane przez bieżącego dostawcę.

(Odziedziczone po SiteMapProvider)
GetType()

Type Pobiera bieżące wystąpienie.

(Odziedziczone po Object)
HintAncestorNodes(SiteMapNode, Int32)

Zapewnia metodę, którą dostawcy mapy lokacji mogą zastąpić w celu przeprowadzenia zoptymalizowanego pobierania jednego lub kilku poziomów węzłów nadrzędnych i węzłów nadrzędnych względem określonego SiteMapNode obiektu.

(Odziedziczone po SiteMapProvider)
HintNeighborhoodNodes(SiteMapNode, Int32, Int32)

Zapewnia metodę, którą dostawcy mapy lokacji mogą zastąpić w celu przeprowadzenia zoptymalizowanego pobierania węzłów znajdujących się w pobliżu określonego węzła.

(Odziedziczone po SiteMapProvider)
Initialize(String, NameValueCollection)

Inicjuje implementację SiteMapProvider , w tym wszelkie zasoby potrzebne do załadowania danych mapy lokacji z magazynu trwałego.

(Odziedziczone po SiteMapProvider)
IsAccessibleToUser(HttpContext, SiteMapNode)

Pobiera wartość logiczną wskazującą, czy określony SiteMapNode obiekt może być wyświetlany przez użytkownika w określonym kontekście.

(Odziedziczone po SiteMapProvider)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
RemoveNode(SiteMapNode)

Usuwa określony SiteMapNode obiekt ze wszystkich kolekcji węzłów mapy witryny śledzonych przez dostawcę mapy lokacji.

ResolveSiteMapNode(HttpContext)

SiteMapResolve Zgłasza zdarzenie.

(Odziedziczone po SiteMapProvider)
ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Zdarzenia

SiteMapResolve

Występuje, gdy właściwość jest wywoływana CurrentNode .

(Odziedziczone po SiteMapProvider)

Dotyczy

Produkt Wersje
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1

Zobacz też