StaticSiteMapProvider Classe

Definição

Serve como uma implementação parcial da classe abstrata SiteMapProvider e serve como uma classe base para a classe XmlSiteMapProvider, que é o provedor padrão de mapa do site no ASP.NET.

public abstract class StaticSiteMapProvider : System.Web.SiteMapProvider
Herança
StaticSiteMapProvider
Derivado

Exemplos

O exemplo de código a seguir demonstra como estender a classe para usar o StaticSiteMapProvider Microsoft Access como um provedor de mapa de site. A AccessSiteMapProvider classe é um provedor de mapa de site que dá suporte apenas a uma hierarquia simples de um nível de profundidade. A tabela na qual os dados do mapa do site são armazenados tem a seguinte estrutura:

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

A AccessSiteMapProvider classe é derivada da StaticSiteMapProvider classe e recupera suas informações de um banco de dados do Microsoft Access usando consultas SQL básicas e os OleDbCommand objetos e OleDbDataReader .

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;
            }
        }
    }
}

Por fim, o AccessSiteMapProvider é configurado como o provedor padrão no arquivo Web.config a seguir.

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

Comentários

A StaticSiteMapProvider classe é uma implementação parcial da classe abstrata SiteMapProvider e fornece dois métodos adicionais: AddNode e RemoveNode, bem como os métodos abstratos BuildSiteMap e protegidos Clear .

A StaticSiteMapProvider classe dá suporte à gravação de um provedor de mapa de site (por exemplo, um XmlSiteMapProvider) que converte um mapa de site armazenado no armazenamento persistente para um armazenado na memória. A StaticSiteMapProvider classe fornece implementações básicas para armazenar e recuperar SiteMapNode objetos.

As SiteMapProvider classes e StaticSiteMapProvider dão suporte ao conceito de uma hierarquia de provedor de mapa de site, em que um provedor de mapa de site pode ter uma relação hierárquica com outros provedores de mapa de site. Esse padrão é implementado com as RootProvider propriedades e ParentProvider .

A StaticSiteMapProvider classe armazena seus SiteMapNode objetos em tabelas de hash e usa internamente a SiteMapNode.Url propriedade das páginas, representada por nós de mapa do site, como chaves. (Se um nó de mapa do site não especificar uma URL, ele será rastreado usando uma chave exclusiva gerada automaticamente.) Como resultado, você não pode ter nós de mapa de site em que um nó de mapa de site com a mesma URL é usado mais de uma vez. Por exemplo, tentar carregar o nó do mapa do site ilustrado no exemplo de código a seguir com a XmlSiteMapProvider classe , que é o padrão ASP.NET provedor de mapa de site ou qualquer provedor de mapa de site derivado da StaticSiteMapProvider classe não funcionará porque a página AboutUs.aspx é usada mais de uma vez.

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

Se você estiver estendendo a StaticSiteMapProvider classe, os três métodos mais importantes serão os GetRootNodeCoremétodos , Initializee BuildSiteMap . Os métodos e FindSiteMapNode têm implementações padrão que são suficientes para a maioria das Clear implementações personalizadas do provedor de mapa de site.

O Initialize método é chamado para inicializar provedores de mapa de site derivados, incluindo todos os recursos necessários para carregar dados do mapa do site, mas tenta criar o nó de mapa do site na memória. Se a classe derivada estiver usando arquivos para armazenar dados do mapa do site, qualquer inicialização de arquivo poderá ser executada aqui. Se o nó de mapa do site usar algum outro tipo de armazenamento de dados, como um banco de dados relacional, a inicialização de uma conexão poderá ser executada aqui. Atributos adicionais, como nomes de arquivo ou cadeias de conexão que são colocadas no elemento provedor de mapa do site na configuração, são processados pelo sistema de configuração ASP.NET e passados para o Initialize método com o attributes parâmetro .

O BuildSiteMap método deve ser substituído por todas as classes derivadas da StaticSiteMapProvider classe e é chamado para carregar o nó do mapa do site do armazenamento persistente e convertê-lo em uma representação interna. O BuildSiteMap método é chamado internamente em muitas das implementações de membro padrão das StaticSiteMapProvider classes e XmlSiteMapProvider . Se você implementar seu próprio provedor de mapa de site, verifique se o processamento de dados do mapa do site ocorre uma vez e as chamadas subsequentes para o BuildSiteMap método retornam imediatamente, se as informações do mapa do site já tiverem sido carregadas. Ao implementar o BuildSiteMap método, verifique se ele é thread-safe, pois várias solicitações simultâneas de página podem resultar indiretamente em várias chamadas para carregar informações do mapa do site. A infraestrutura de mapa do site dá suporte à exibição de informações de mapa do site com base na função do usuário. Dependendo da Roles propriedade compatível com os objetos individuais SiteMapNode , uma estrutura de navegação diferente pode existir para usuários diferentes. As implementações padrão dos membros de recuperação de nó do mapa do site da classe executam o StaticSiteMapProvider corte de segurança automaticamente chamando o IsAccessibleToUser método .

Os AddNodemétodos e ClearRemoveNode manipulam as coleções internas que são usadas para rastrear nós de mapa de site de maneira thread-safe.

Notas aos Implementadores

Ao herdar da StaticSiteMapProvider classe , você deve substituir o seguinte membro: BuildSiteMap().

Construtores

StaticSiteMapProvider()

Inicializa uma nova instância da classe StaticSiteMapProvider.

Propriedades

CurrentNode

Obtém o objeto SiteMapNode que representa a página atualmente solicitada.

(Herdado de SiteMapProvider)
Description

Obtém uma breve descrição amigável adequada para exibição em ferramentas administrativas ou outras IUs (interfaces do usuário).

(Herdado de ProviderBase)
EnableLocalization

Obtém ou define um valor booliano que indica se os valores localizados dos atributos SiteMapNode são retornados.

(Herdado de SiteMapProvider)
Name

Obtém o nome amigável usado para referir-se ao provedor durante a configuração.

(Herdado de ProviderBase)
ParentProvider

Obtém ou define o objeto SiteMapProvider pai do provedor atual.

(Herdado de SiteMapProvider)
ResourceKey

Obtém ou define a chave de recursos usada para localizar atributos SiteMapNode.

(Herdado de SiteMapProvider)
RootNode

Obtém o objeto SiteMapNode raiz dos dados do mapa de site que o provedor atual representa.

(Herdado de SiteMapProvider)
RootProvider

Obtém o objeto SiteMapProvider raiz na hierarquia de provedores atuais.

(Herdado de SiteMapProvider)
SecurityTrimmingEnabled

Obtém um valor booliano que indica se um provedor de mapa de site filtra nós do mapa de site com base em uma função do usuário.

(Herdado de SiteMapProvider)

Métodos

AddNode(SiteMapNode, SiteMapNode)

Adiciona um SiteMapNode às coleções mantidas pelo provedor de mapa de site e estabelece uma relação pai/filho entre os objetos SiteMapNode.

AddNode(SiteMapNode)

Adiciona um objeto SiteMapNode à coleção de nós mantida pelo provedor do mapa do site.

(Herdado de SiteMapProvider)
BuildSiteMap()

Quando substituído em uma classe derivada, carrega as informações do mapa do site do armazenamento persistente e o compila na memória.

Clear()

Remove todos os elementos nas coleções de nós pais e filhos do mapa de site que o StaticSiteMapProvider controla como parte de seu estado.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
FindSiteMapNode(HttpContext)

Recupera um objeto SiteMapNode que representa a página solicitada no momento usando o objeto HttpContext especificado.

(Herdado de SiteMapProvider)
FindSiteMapNode(String)

Recupera um objeto SiteMapNode que representa a página na URL especificada.

FindSiteMapNodeFromKey(String)

Recupera um objeto SiteMapNode com base em uma chave especificada.

GetChildNodes(SiteMapNode)

Recupera os nós de mapa de site filhos de um objeto SiteMapNode específico.

GetCurrentNodeAndHintAncestorNodes(Int32)

Fornece um método de pesquisa otimizado para provedores de mapa de site ao recuperar o nó para a página solicitada no momento e ao buscar os nós de mapa de site pai e ancestral para a página atual.

(Herdado de SiteMapProvider)
GetCurrentNodeAndHintNeighborhoodNodes(Int32, Int32)

Fornece um método de pesquisa otimizado para provedores de mapa de site ao recuperar o nó para a página solicitada no momento e ao buscar os nós de mapa de site na proximidade do nó atual.

(Herdado de SiteMapProvider)
GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetParentNode(SiteMapNode)

Recupera o nó pai de mapa de site de um objeto SiteMapNode específico.

GetParentNodeRelativeToCurrentNodeAndHintDownFromParent(Int32, Int32)

Fornece um método de pesquisa otimizado para provedores de mapa de site ao recuperar um nó ancestral para a página solicitada no momento e ao buscar os nós descendentes para o ancestral.

(Herdado de SiteMapProvider)
GetParentNodeRelativeToNodeAndHintDownFromParent(SiteMapNode, Int32, Int32)

Fornece um método de pesquisa otimizado para provedores de mapa de site ao recuperar um nó ancestral para o objeto SiteMapNode especificado e ao buscar seus nós filho.

(Herdado de SiteMapProvider)
GetRootNodeCore()

Quando substituído em uma classe derivada, recupera o nó raiz de todos os nós gerenciados no momento pelo provedor atual.

(Herdado de SiteMapProvider)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
HintAncestorNodes(SiteMapNode, Int32)

Fornece um método que os provedores de mapa de site podem substituir para executar uma recuperação otimizada de um ou mais níveis de nós pai e ancestrais, relativos ao objeto SiteMapNode especificado.

(Herdado de SiteMapProvider)
HintNeighborhoodNodes(SiteMapNode, Int32, Int32)

Fornece um método que os provedores de mapa de site podem substituir para executar uma recuperação de nós otimizada localizada na proximidade do nó especificado.

(Herdado de SiteMapProvider)
Initialize(String, NameValueCollection)

Inicializa a implementação SiteMapProvider, incluindo todos os recursos necessários para carregar os dados de mapa do site do armazenamento persistente.

(Herdado de SiteMapProvider)
IsAccessibleToUser(HttpContext, SiteMapNode)

Recupera o valor booliano que indica se o objeto SiteMapNode especificado pode ser exibido pelo usuário no contexto especificado.

(Herdado de SiteMapProvider)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
RemoveNode(SiteMapNode)

Remove o objeto SiteMapNode especificado de todas as coleções de nó de mapa de site controladas pelo provedor de mapa de site.

ResolveSiteMapNode(HttpContext)

Aciona o evento SiteMapResolve.

(Herdado de SiteMapProvider)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Eventos

SiteMapResolve

Ocorre quando a propriedade CurrentNode é chamada.

(Herdado de SiteMapProvider)

Aplica-se a

Produto Versões
.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

Confira também