Esporta (0) Stampa
Espandi tutto

Classe SiteMapPath

Aggiornamento: novembre 2007

Visualizza un set di testi o immagini con collegamenti ipertestuali che consentono agli utenti di spostarsi più facilmente all'interno di un sito, pur occupando una quantità minima di spazio nella pagina.

Spazio dei nomi:  System.Web.UI.WebControls
Assembly:  System.Web (in System.Web.dll)

[AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class SiteMapPath : CompositeControl
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal) */
/** @attribute AspNetHostingPermissionAttribute(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal) */
public class SiteMapPath extends CompositeControl
public class SiteMapPath extends CompositeControl
<asp:SiteMapPath />

SiteMapPath è un controllo di spostamento nel sito che riflette i dati forniti dall'oggetto SiteMap. È un comodo sistema per spostarsi facilmente all'interno di un sito senza sprecare spazio e funge da punto di riferimento per individuare nel sito la posizione della pagina attualmente visualizzata. Questo tipo di controllo visualizza un percorso gerarchico di nomi di pagine con collegamenti ipertestuali tramite il quale è possibile tornare dalla posizione corrente ai livelli superiori della gerarchia di pagine. SiteMapDataSource. SiteMapPath è utile per i siti che hanno una struttura gerarchica di pagine con molti livelli, ma nei quali un oggetto TreeView o Menu potrebbe richiedere eccessivo spazio in una pagina.

Il controllo SiteMapPath interagisce direttamente con i dati della mappa del proprio sito Web. Se viene utilizzato in una pagina non rappresentata nella mappa del sito, non viene visualizzato. Per ulteriori informazioni sulle mappe dei siti, vedere Cenni preliminari sugli spostamenti all'interno dei siti ASP.NET.

SiteMapPath è costituito da nodi. Ciascun elemento del percorso viene indicato come nodo ed è rappresentato da un oggetto SiteMapNodeItem. Il nodo che ancora il percorso e rappresenta la base della struttura gerarchica è denominato nodo principale. Il nodo che rappresenta la pagina attualmente visualizzata è il nodo corrente. Qualsiasi altro nodo compreso tra il nodo corrente e quello principale è un nodo padre. Nella tabella riportata di seguito vengono descritti i tre diversi tipi di nodi.

Tipo di nodo

Descrizione

principale

Nodo che ancora un set gerarchico di nodi.

padre

Nodo con uno o più nodi figlio, ma che non sia il nodo corrente.

corrente

Nodo che rappresenta la pagina attualmente visualizzata.

Ogni nodo visualizzato da un oggetto SiteMapPath è un controllo HyperLink o Literal a cui è possibile applicare un modello o uno stile. I modelli e gli stili vengono applicati ai nodi secondo due regole di precedenza:

  • Se per un nodo è definito un modello, questo esegue l'override di qualsiasi stile definito per lo stesso nodo.

  • I modelli e gli stili specifici dei tipi di nodi eseguono l'override dei modelli e degli stili generici definiti per tutti i nodi.

Le proprietà NodeStyle e NodeTemplate vengono applicate a tutti i nodi, indipendentemente dal tipo di nodo. Se vengono definite entrambe le proprietà, avrà la precedenza la proprietà NodeTemplate.

Le proprietà CurrentNodeTemplate e CurrentNodeStyle vengono applicate ai nodi che rappresentano la pagina attualmente visualizzata. Se oltre alla proprietà CurrentNodeTemplate viene definita una proprietà NodeTemplate, questa verrà ignorata. Se oltre alla proprietà CurrentNodeStyle viene definita una proprietà NodeStyle, questa verrà unita alla proprietà CurrentNodeStyle per creare uno stile unito. Tale stile unito utilizza tutti gli elementi della proprietà CurrentNodeStyle, oltre agli eventuali elementi aggiuntivi della proprietà NodeStyle non in conflitto con CurrentNodeStyle.

Le proprietà RootNodeTemplate e RootNodeStyle vengono applicate al nodo che rappresenta la radice della gerarchia di spostamento nel sito. Se oltre alla proprietà RootNodeTemplate viene definita una proprietà NodeTemplate, questa verrà ignorata. Se oltre alla proprietà RootNodeStyle viene definita una proprietà NodeStyle, questa verrà unita alla proprietà RootNodeStyle per creare uno stile unito. Tale stile unito utilizza tutti gli elementi della proprietà RootNodeStyle, oltre agli eventuali elementi aggiuntivi della proprietà NodeStyle non in conflitto con CurrentNodeStyle. Se infine la pagina attualmente visualizzata è la pagina principale del sito, verranno utilizzate le proprietà RootNodeTemplate e RootNodeStyle anziché la proprietà CurrentNodeTemplate o CurrentNodeStyle.

Il controllo SiteMapPath utilizza come origine dati per le informazioni di spostamento nel sito il provider della mappa del sito identificato dalla proprietà SiteMapProvider. Se non è specificato alcun provider, viene utilizzato il provider predefinito del sito, identificato nella proprietà SiteMap.Provider. Si tratta in genere di un'istanza del provider della mappa del sito predefinito di ASP.NET, ovvero XmlSiteMapProvider. Se all'interno di un sito viene utilizzato il controllo SiteMapPath, ma non è configurato alcun provider della mappa del sito, il controllo genera un'eccezione HttpException.

Il controllo SiteMapPath fornisce inoltre eventi programmabili. In questo modo è possibile eseguire una routine personalizzata ogni volta che si verifica un evento. Nella tabella riportata di seguito sono elencati gli eventi supportati dal controllo SiteMapPath.

Evento

Descrizione

ItemCreated

Si verifica quando il controllo SiteMapPath crea un oggetto SiteMapNodeItem e quindi lo associa a un oggetto SiteMapNode.

ItemDataBound

Si verifica quando un oggetto SiteMapNodeItem viene associato a dati della mappa del sito contenuti nell'oggetto SiteMapNode.

Le classi che derivano da SiteMapPath eseguono l'override del metodo InitializeItem per personalizzare i controlli SiteMapNodeItem contenuti nel controllo di spostamento. Per esercitare un controllo completo sulle modalità di creazione e aggiunta degli oggetti SiteMapNodeItem all'oggetto SiteMapPath, le classi derivate eseguono l'override del metodo CreateControlHierarchy.

Accesso facilitato

Il codice sottoposto a rendering per impostazione predefinita per questo controllo potrebbe non essere conforme agli standard di accesso facilitato, come le linee guida WCAG (Web Content Accessibility Guidelines) 1.0 livello 1. Per informazioni dettagliate sul supporto dell'accesso facilitato per questo controllo, vedere Controlli ASP.NET e accesso facilitato.

TopicLocation
Procedura dettagliata: aggiunta del sistema di esplorazione a un sito WebGenerazione di applicazioni Web ASP.NET in Visual Studio
Procedura: enumerare i nodi della mappa del sito a livello di codiceGenerazione di applicazioni Web ASP.NET
Procedura: filtrare i nodi recuperati dai controlli server Web SiteMapDataSourceGenerazione di applicazioni Web ASP.NET
Procedura: configurare più mappe del sito e provider di mappa del sitoGenerazione di applicazioni Web ASP.NET
Procedura: localizzare i dati della mappa del sitoGenerazione di applicazioni Web ASP.NET
Procedura: visualizzare i dati della mappa del sito in controlli server Web non gerarchiciGenerazione di applicazioni Web ASP.NET
Procedura: personalizzare l'aspetto dei controlli server Web SiteMapPathGenerazione di applicazioni Web ASP.NET
Procedura: aggiungere l'esplorazione semplice di sitiGenerazione di applicazioni Web ASP.NET
Procedura: implementare i provider della mappa del sito ASP.NETGenerazione di applicazioni Web ASP.NET
Procedura: modificare a livello di codice i nodi della mappa del sito in memoriaGenerazione di applicazioni Web ASP.NET
Procedura: enumerare i nodi della mappa del sito a livello di codiceCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: configurare più mappe del sito e provider di mappa del sitoCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: filtrare i nodi recuperati dai controlli server Web SiteMapDataSourceCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura dettagliata: aggiunta del sistema di esplorazione a un sito WebCompilazione di applicazioni con Visual Web Developer
Procedura: modificare a livello di codice i nodi della mappa del sito in memoriaCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: localizzare i dati della mappa del sitoCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: personalizzare l'aspetto dei controlli server Web SiteMapPathCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: visualizzare i dati della mappa del sito in controlli server Web non gerarchiciCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: aggiungere l'esplorazione semplice di sitiCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: implementare i provider della mappa del sito ASP.NETCompilazione di applicazioni Web ASP.NET in Visual Studio
Procedura: aggiungere la navigazione semplice di sitidv_vwdcon

Nell'esempio di codice riportato di seguito viene utilizzato in modo dichiarativo un controllo SiteMapPath in una pagina Web Form. In questo esempio vengono illustrate alcune delle regole di precedenza che determinano l'ordine in cui i modelli e gli stili vengono applicati ai nodi SiteMapPath.

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" runat="server">

            <!-- The following example demonstrates some of the orders
                 of precedence when applying styles and templates to
                 functional nodes of a SiteMapPath.

                 The NodeStyle and RootNodeStyle define the same attributes,
                 but are different and conflict with each other: the
                 RootNodeStyle supersedes NodeStyle, and is the style
                 rendered. Notice, however, that the underline style
                 defined by NodeStyle is still applied.

                 Both a CurrentNodeStyle and a CurrentNodeTemplate are
                 defined. A template supersedes a style for a node
                 type, so CurrentNodeTemplate is displayed and CurrentNodeStyle
                 is ignored. -->

            <asp:SiteMapPath ID="SiteMapPath1" runat="server"
                RenderCurrentNodeAsLink="true"
                NodeStyle-Font-Names="Franklin Gothic Medium"
                NodeStyle-Font-Underline="true"
                NodeStyle-Font-Bold="true"
                RootNodeStyle-Font-Names="Symbol"
                RootNodeStyle-Font-Bold="false"
                CurrentNodeStyle-Font-Names="Verdana"
                CurrentNodeStyle-Font-Size="10pt"
                CurrentNodeStyle-Font-Bold="true"
                CurrentNodeStyle-ForeColor="red"
                CurrentNodeStyle-Font-Underline="false">
                <CURRENTNODETEMPLATE>
                        <asp:Image id="Image1" runat="server" ImageUrl="WebForm2.jpg" AlternateText="WebForm2"/>
                </CURRENTNODETEMPLATE>
            </asp:SiteMapPath>


        </form>
    </body>
</html>


<%@ Page Language="VJ#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
    <title>ASP.NET Example</title>
</head>
<body>
        <form id="form1" runat="server">

            <!-- The following example demonstrates some of the orders
                 of precedence when applying styles and templates to
                 functional nodes of a SiteMapPath.

                 The NodeStyle and RootNodeStyle define the same attributes,
                 but are different and conflict with each other: the
                 RootNodeStyle supercedes NodeStyle, and is the style
                 rendered. Notice, however, that the underline style
                 defined by NodeStyle is still applied.

                 Both a CurrentNodeStyle and a CurrentNodeTemplate are
                 defined. A template supercedes a style for a node
                 type, so CurrentNodeTemplate is displayed and CurrentNodeStyle
                 is ignored. -->

            <asp:SiteMapPath ID="SiteMapPath1" runat="server"
                RenderCurrentNodeAsLink="true"
                NodeStyle-Font-Names="Franklin Gothic Medium"
                NodeStyle-Font-Underline="true"
                NodeStyle-Font-Bold="true"
                RootNodeStyle-Font-Names="Symbol"
                RootNodeStyle-Font-Bold="false"
                CurrentNodeStyle-Font-Names="Verdana"
                CurrentNodeStyle-Font-Size="10pt"
                CurrentNodeStyle-Font-Bold="true"
                CurrentNodeStyle-ForeColor="red"
                CurrentNodeStyle-Font-Underline="false">
                <CURRENTNODETEMPLATE>
                        <asp:Image id="Image1" runat="server" ImageUrl="WebForm2.jpg" AlternateText="WebForm2"/>
                </CURRENTNODETEMPLATE>
            </asp:SiteMapPath>


        </form>
    </body>
</html>


Nell'esempio precedente vengono utilizzati il provider della mappa del sito predefinito e un file Web.sitemap con la struttura riportata di seguito.

<siteMap>
  <siteMapNode title="WebForm1" description="WebForm1" url="WebForm1.aspx" >
    <siteMapNode title="WebForm2" description="WebForm2" url="WebForm2.aspx"/>
  </siteMapNode>
</siteMap>

Nell'esempio di codice riportato di seguito viene illustrato come estendere il controllo SiteMapPath e aggiungervi una nuova funzionalità eseguendo l'override del metodo InitializeItem. Il controllo DropDownSiteMapPath aggiunge un oggetto DropDownList dopo il nodo corrente, in modo da facilitare lo spostamento su pagine che costituiscono i nodi figlio della pagina corrente. In questo esempio viene illustrato come utilizzare gli oggetti SiteMapNodeItem, incluso come controllare il relativo oggetto SiteMapNodeItemType e chiamare il metodo OnItemCreated dopo la creazione degli elementi.

using System;
using System.Collections;
using System.ComponentModel;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;


// The DropDownNavigationPath is a class that extends the SiteMapPath
// control and renders a DropDownList after the CurrentNode. The
// DropDownList displays a list of pages found further down the site map
// hierarchy from the current one. Selecting an item in the DropDownList
// redirects to that page.
//
// For simplicity, the DropDownNavigationPath assumes the
// RootToCurrent PathDirection, and does not apply styles
// or templates the current node.
//
[AspNetHostingPermission(SecurityAction.Demand, Level=AspNetHostingPermissionLevel.Minimal)]
public class DropDownNavigationPath : SiteMapPath {
    // Override the InitializeItem method to add a PathSeparator
    // and DropDownList to the current node.
    protected override void InitializeItem(SiteMapNodeItem item) {

        // The only node that must be handled is the CurrentNode.
        if (item.ItemType == SiteMapNodeItemType.Current)
        {
            HyperLink hLink = new HyperLink();

            // No Theming for the HyperLink.
            hLink.EnableTheming = false;
            // Enable the link of the SiteMapPath is enabled.
            hLink.Enabled = this.Enabled;

            // Set the properties of the HyperLink to
            // match those of the corresponding SiteMapNode.
            hLink.NavigateUrl = item.SiteMapNode.Url;
            hLink.Text        = item.SiteMapNode.Title;
            if (ShowToolTips) {
                hLink.ToolTip = item.SiteMapNode.Description;
            }

            // Apply styles or templates to the HyperLink here.
            // ...
            // ...

            // Add the item to the Controls collection.
            item.Controls.Add(hLink);

            AddDropDownListAfterCurrentNode(item);
        }
        else {
            base.InitializeItem(item);
        }
    }
    private void AddDropDownListAfterCurrentNode(SiteMapNodeItem item) {

        SiteMapNodeCollection childNodes = item.SiteMapNode.ChildNodes;

        // Only do this work if there are child nodes.
        if (childNodes != null) {

            // Add another PathSeparator after the CurrentNode.
            SiteMapNodeItem finalSeparator =
                new SiteMapNodeItem(item.ItemIndex,
                                    SiteMapNodeItemType.PathSeparator);

            SiteMapNodeItemEventArgs eventArgs =
                new SiteMapNodeItemEventArgs(finalSeparator);

            InitializeItem(finalSeparator);
            // Call OnItemCreated every time a SiteMapNodeItem is
            // created and initialized.
            OnItemCreated(eventArgs);

            // The pathSeparator does not bind to any SiteMapNode, so
            // do not call DataBind on the SiteMapNodeItem.
            item.Controls.Add(finalSeparator);

            // Create a DropDownList and populate it with the children of the
            // CurrentNode. There are no styles or templates that are applied
            // to the DropDownList control. If OnSelectedIndexChanged is raised,
            // the event handler redirects to the page selected.
            // The CurrentNode has child nodes.
            DropDownList ddList = new DropDownList();
            ddList.AutoPostBack = true;

            ddList.SelectedIndexChanged += new EventHandler(this.DropDownNavPathEventHandler);

            // Add a ListItem to the DropDownList for every node in the
            // SiteMapNodes collection.
            foreach (SiteMapNode node in childNodes) {
                ddList.Items.Add(new ListItem(node.Title, node.Url));
            }

            item.Controls.Add(ddList);
        }
    }

    // The sender is the DropDownList.
    private void DropDownNavPathEventHandler(object sender,EventArgs e) {
        DropDownList ddL = sender as DropDownList;

        // Redirect to the page the user chose.
        if (Context != null)
            Context.Response.Redirect(ddL.SelectedValue);
    }
}


import System.*;
import System.Collections.*;
import System.ComponentModel.*;
import System.Web.*;
import System.Web.UI.*;
import System.Web.UI.WebControls.*;

// The DropDownNavigationPath is a class that extends the SiteMapPath
// control and renders a DropDownList after the CurrentNode. The     
// DropDownList displays a list of pages found further down the site map
// hierarchy from the current one. Selecting an item in the DropDownList
// redirects to that page.
//
// For simplicity, the DropDownNavigationPath assumes the 
// RootToCurrent PathDirection, and does not apply styles 
// or templates the current node.
//
public class DropDownNavigationPath extends SiteMapPath
{
    // Override the InitializeItem method to add a PathSeparator
    // and DropDownList to the current node.
    protected void InitializeItem(SiteMapNodeItem item)
    {
        // The only node that must be handled is the CurrentNode.
        if (item.get_ItemType().Equals(SiteMapNodeItemType.Current)) {
            HyperLink hLink = new HyperLink();
            // No Theming for the HyperLink.
            hLink.set_EnableTheming(false);
            // Enable the link of the SiteMapPath is enabled.
            hLink.set_Enabled(this.get_Enabled());
            // Set the properties of the HyperLink to 
            // match those of the corresponding SiteMapNode.
            hLink.set_NavigateUrl(item.get_SiteMapNode().get_Url());
            hLink.set_Text(item.get_SiteMapNode().get_Title());
            if (get_ShowToolTips()) {
                hLink.set_ToolTip(item.get_SiteMapNode().get_Description());
            }
            // Apply styles or templates to the HyperLink here.
            // ...
            // ...
            // Add the item to the Controls collection.
            item.get_Controls().Add(hLink);

            AddDropDownListAfterCurrentNode(item);
        }
        else {
            super.InitializeItem(item);
        }   
    } //InitializeItem

    private void AddDropDownListAfterCurrentNode(SiteMapNodeItem item)
    {
        SiteMapNodeCollection childNodes = item.get_SiteMapNode().
            get_ChildNodes();
        // Only do this work if there are child nodes.
        if (childNodes != null) {
            // Add another PathSeparator after the CurrentNode.
            SiteMapNodeItem finalSeparator = new SiteMapNodeItem(item.
                get_ItemIndex(), SiteMapNodeItemType.PathSeparator);

            SiteMapNodeItemEventArgs eventArgs = new SiteMapNodeItemEventArgs(
                finalSeparator);

            InitializeItem(finalSeparator);
            // Call OnItemCreated every time a SiteMapNodeItem is
            // created and initialized.
            OnItemCreated(eventArgs);
            // The pathSeparator does not bind to any SiteMapNode, so 
            // do not call DataBind on the SiteMapNodeItem.
            item.get_Controls().Add(finalSeparator);
            // Create a DropDownList and populate it with the children of the 
            // CurrentNode. There are no styles or templates that are applied
            // to the DropDownList control. If OnSelectedIndexChanged is raised, 
            // the event handler redirects to the page selected.
            // The CurrentNode has child nodes.
            DropDownList ddList = new DropDownList();
            ddList.set_AutoPostBack(true);

            ddList.add_SelectedIndexChanged(new EventHandler(this.
                DropDownNavPathEventHandler));
            // Add a ListItem to the DropDownList for every node in the
            // SiteMapNodes collection.
            for (int iCtr = 0; iCtr < childNodes.get_Count(); iCtr++) {
                SiteMapNode node = (SiteMapNode)childNodes.get_Item(iCtr);
                ddList.get_Items().Add(new ListItem(node.get_Title(), node.
                    get_Url()));
            }

            item.get_Controls().Add(ddList);
        }
    } //AddDropDownListAfterCurrentNode

    // The sender is the DropDownList.
    public void DropDownNavPathEventHandler(Object sender, EventArgs e)
    {
        DropDownList ddL = (DropDownList)sender;
        // Redirect to the page the user chose.
        if (get_Context() != null) {
            get_Context().get_Response().Redirect(ddL.get_SelectedValue());
        }
    } //DropDownNavPathEventHandler
 } //DropDownNavigationPath


Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition , Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0, 2.0

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft