Share via


Informazioni generali sulle pagine master ASP.NET

Aggiornamento: novembre 2007

Le pagine master ASP.NET consentono di creare un layout coerente per le pagine dell'applicazione. Con una singola pagina master è possibile definire l'aspetto e il comportamento standard per tutte o per un gruppo di pagine dell'applicazione. Successivamente potranno essere create delle pagine di contenuto singole con gli elementi che si desidera visualizzare. Quando richieste, le pagine di contenuto vengono unite alla pagina master per generare un output in cui sono congiunti il layout definito nella pagina master e il contenuto della pagina di contenuto.

Funzionamento delle pagine master

Le pagine master sono costituite essenzialmente da due parti, la pagina master vera e propria e una o più pagine di contenuto.

Nota:

Le pagine master inoltre possono essere nidificate. Per informazioni dettagliate, vedere Pagine master ASP.NET nidificate.

Pagine master

Una pagina master è un file ASP.NET con estensione master, ad esempio MySite.master, che presenta un layout predefinito in cui sono compresi elementi HTML, controlli server e testo statico. La pagina master è identificata da una direttiva @ Master speciale, che sostituisce la direttiva @ Page utilizzata per le pagine aspx ordinarie. La direttiva è analoga alla seguente:

<%@ Master Language="VB" %>
<%@ Master Language="C#" %>

Nella direttiva @ Master possono essere contenute le stesse indicazioni specificabili nella direttiva @ Control. Nella direttiva di pagina master seguente, ad esempio, è incluso il nome di un file code-behind. La direttiva inoltre assegna un nome di classe alla pagina master.

<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
<%@ Master Language="C#" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

Oltre alla direttiva @ Master, nella pagina master possono essere inclusi tutti gli elementi HTML di primo livello, quali html, head e form. In una pagina master è ad esempio possibile utilizzare una tabella HTML per il layout, un elemento img per il logo aziendale, un testo statico per le informazioni sul copyright e controlli server per la creazione di opzioni di spostamento nel sito. È inoltre possibile utilizzare qualsiasi elemento HTML e ASP.NET come parte di una pagina master.

Segnaposto di contenuto sostituibile

Oltre al testo statico e ai controlli che verranno visualizzati su ogni pagina, nella pagina master possono essere inclusi anche più controlli ContentPlaceHolder. Tramite i controlli di segnaposto è possibile definire aree per la visualizzazione di contenuti sostituibili, definiti a loro volta nelle pagine di contenuto. Una volta definiti i controlli ContentPlaceHolder, una pagina master può essere analoga alla seguente:

<% @ Master Language="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
    1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head  >
    <title>Master page title</title>
</head>
<body>
    <form id="form1" >
        <table>
            <tr>
                <td><asp:contentplaceholder id="Main"  /></td>
                <td><asp:contentplaceholder id="Footer"  /></td>
            </tr>
        </table>
    </form>
</body>
</html>
<%@ Master Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
    1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head  >
    <title>Master page title</title>
</head>
<body>
    <form id="form1" >
        <table>
           <tr>
               <td><asp:contentplaceholder id="Main"  /></td>
               <td><asp:contentplaceholder id="Footer"  /></td>
           </tr>
        </table>
    </form>
</body>
</html>

Pagine di contenuto

È possibile definire il contenuto relativo ai controlli di segnaposto della pagina master creando pagine di contenuto singole, ovvero pagine ASP.NET (file aspx e, se lo si desidera, file code-behind) associate a una pagina master specifica. L'associazione viene stabilita nella direttiva @ Page della pagina di contenuto includendo un attributo MasterPageFile che fa riferimento alla pagina master da utilizzare. In una pagina di contenuto può ad esempio essere compresa la direttiva @ Page seguente, che associa la pagina di contenuto alla pagina Master1.master.

<%@ Page Language="VB" MasterPageFile="~/MasterPages/Master1.master" Title="Content Page" %>
<%@ Page Language="C#" MasterPageFile="~/MasterPages/Master1.master" Title="Content Page"%>

Il contenuto di una pagina di contenuto viene creato aggiungendo controlli Content ed eseguendo il mapping di questi ultimi sui controlli ContentPlaceHolder nella pagina master. Ad esempio, nella pagina master possono essere presenti segnaposto di contenuto denominati Main e Footer. Nella pagina di contenuto è possibile creare due controlli Content mappati rispettivamente sul segnaposto Main del controllo ContentPlaceHolder e sul segnaposto Footer del controllo ContentPlaceHolder, come indicato nella figura che segue.

Sostituzione del contenuto dei segnaposto

Una volta creati i controlli Content, è possibile aggiungervi testo e ulteriori controlli. In una pagina di contenuto tutti gli elementi non inclusi all'interno del controllo Content genereranno un errore, ad eccezione dei blocchi di script per il codice server. In una pagina di contenuto possono essere effettuate tutte le operazioni eseguibili in una pagina ASP.NET. È ad esempio possibile generare contenuti per un controllo Content utilizzando i controlli server e le query di database o altri meccanismi dinamici.

Una pagina di contenuto può essere analoga alla seguente.

<% @ Page Language="VB" MasterPageFile="~/Master.master" Title="Content Page 1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
    Main content.
</asp:Content>
    
<asp:Content ID="Content2" ContentPlaceHolderID="Footer" Runat="Server" >
    Footer content.
</asp:content>

[C#]

<% @ Page Language="C#" MasterPageFile="~/Master.master" Title="Content Page 1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
    Main content.
</asp:Content>
    
<asp:Content ID="Content2" ContentPlaceHolderID="Footer" Runat="Server" >
    Footer content.
</asp:content>

La direttiva @ Page associa la pagina di contenuto a una specifica pagina master e definisce un titolo per la pagina che verrà unita alla pagina master. Si noti che nella pagina di contenuto non è presente altro markup all'esterno dei controlli Content. Affinché le impostazioni del titolo possano essere unite in fase di esecuzione, è necessario che nella pagina master sia presente un elemento head con l'attributo .

È possibile creare più pagine master per definire un layout differente per ciascuna area del sito, nonché un insieme di pagine di contenuto diverso per ogni pagina master.

Vantaggi delle pagine master

Le pagine master forniscono funzionalità che di solito vengono realizzate copiando ripetutamente elementi di controllo, testo e codice esistenti, utilizzando pagine con frame, aggiungendo file relativi a elementi comuni, specificando controlli utente ASP.NET e così via. Le pagine master offrono svariati vantaggi, ad esempio:

  • Consentono di gestire centralmente le funzionalità delle pagine, in modo che gli aggiornamenti possano essere eseguiti in un'unica posizione.

  • Semplificano le operazioni di creazione di un insieme di controlli e di codice, nonché l'applicazione dei risultati a un gruppo di pagine. Ad esempio, è possibile utilizzare i controlli nella pagina master per creare un menu valido per tutte le pagine.

  • Offrono la possibilità di controllare accuratamente il layout della pagina finale consentendo di verificare il rendering dei controlli segnaposto.

  • Forniscono un modello a oggetti che permette di personalizzare la pagina master distinguendola dalle singole pagine di contenuto.

Comportamento delle pagine master in fase di esecuzione

In fase di esecuzione le pagine master vengono gestite in base alla seguente sequenza:

  1. L'utente richiede una pagina digitando l'URL della pagina di contenuto.

  2. Una volta recuperata la pagina, la direttiva @ Page viene letta. Se la direttiva fa riferimento a una pagina master, viene letta anche quest'ultima. Entrambe le pagine vengono compilate, se richieste per la prima volta.

  3. La pagina master con il contenuto aggiornato viene unita alla struttura dei controlli della pagina di contenuto.

  4. Il contenuto di singoli controlli Content viene unito al controllo ContentPlaceHolder corrispondente nella pagina master.

  5. Viene eseguito il rendering della pagina unita risultante nel browser.

Il processo è illustrato nel diagramma che segue.

Pagine master in fase di esecuzione

Dal punto di vista dell'utente, la pagina master e la pagina di contenuto unite sono un'unica e sola pagina. L'URL della pagina è quello della pagina di contenuto.

Dal punto di vista della programmazione, le due pagine fungono da contenitori separati per i rispettivi controlli. La pagina di contenuto funge da contenitore per la pagina master. È tuttavia possibile fare riferimento ai membri pubblici della pagina master dal codice nella pagina di contenuto, come descritto nella sezione successiva.

Si noti che la pagina master diventa parte della pagina di contenuto. La pagina master opera infatti in modo quasi analogo a un controllo utente, ovvero da elemento figlio della pagina di contenuto e da contenitore all'interno della pagina stessa. In questo caso comunque la pagina master funge da contenitore per tutti i controlli server di cui viene eseguito il rendering nel browser. La struttura dei controlli per una pagina di contenuto e master unita è simile alla seguente:

Page
    Master Page
        (Master page markup and controls)
        ContentPlaceHolder
            Content page markup and server controls
        (Master page markup and controls)
        ContentPlaceHolder
            Content page markup and server controls
        (Master page markup and controls)

Il diagramma è semplificato. Se nella pagina di contenuto non sono inclusi controlli Content corrispondenti, è possibile che nella pagina master siano presenti markup e controlli all'interno dei controlli ContentPlaceHolder.

Questa struttura in genere non influisce sulle modalità di costruzione o programmazione delle pagine, ma in alcuni casi, se nella pagina master è impostata una proprietà a livello di pagina, può influire sul comportamento della pagina di contenuto. La pagina master è infatti il primo elemento padre dei controlli presenti sulla pagina. Ad esempio, impostando la proprietà EnableViewState su true nella pagina di contenuto e su false nella pagina master, lo stato di visualizzazione verrà effettivamente disattivato perché le impostazioni specificate nella pagina master sono prioritarie.

Percorsi delle pagine master e delle pagine di contenuto.

Quando viene richiesta una pagina di contenuto, il contenuto ad essa relativo viene unito alla pagina master. La pagina così creata è eseguita nel contesto della pagina di contenuto. Quando ad esempio si ottiene la proprietà CurrentExecutionFilePath dell'oggetto HttpRequest nel codice di una pagina di contenuto oppure nel codice di una pagina master il percorso corrisponde alla posizione della pagina di contenuto.

Non è necessario che la pagina master e la pagina di contenuto siano memorizzate nella stessa cartella. Se l'attributo MasterPageFile nella direttiva @ Page della pagina di contenuto si risolve in una pagina master, ASP.NET unisce la pagina di contenuto e la pagina master in una singola pagina visualizzata.

Riferimenti a risorse esterne

Sia nella pagina di contenuto che nella pagina master possono essere inclusi controlli ed elementi che fanno riferimento a risorse esterne, ad esempio controlli di immagini che fanno riferimento a file di immagine o punti di ancoraggio che fanno riferimento ad altre pagine.

Il contesto per le pagine di contenuto e master unite corrisponde a quello della pagina di contenuto. Questa situazione può avere effetti sulla specificazione degli URL relativi a risorse esterne, ad esempio file di immagine e pagine di destinazione, nei punti di ancoraggio.

Controlli server

Nei controlli server presenti nelle pagine master ASP.NET modifica in modo dinamico gli URL delle proprietà che fanno riferimento a risorse esterne. È possibile ad esempio inserire un controllo Image in una pagina master ed impostare la relativa proprietà ImageUrl in modo che sia relativa alla pagina master. In fase di esecuzione ASP.NET modificherà l'URL, che pertanto si risolverà correttamente nel contesto della pagina di contenuto.

ASP.NET modifica gli URL nei seguenti casi:

  • L'URL è una proprietà di un controllo server ASP.NET.

  • La proprietà è contrassegnata internamente al controllo come URL (ovvero con l'attributo UrlPropertyAttribute). In pratica, le proprietà dei controlli server ASP.NET comunemente utilizzate per fare riferimento a risorse esterne sono contrassegnate in questo modo.

Altri elementi

ASP.NET non modifica gli URL in elementi diversi dai controlli server. Ad esempio, se si utilizza un elemento img in una pagina master impostandone l'attributo src su un URL, quest'ultimo non potrà essere modificato da ASP.NET. In tal caso l'URL si risolverà nel contesto di una pagina di contenuto e verrà creato un URL appropriato.

In generale, quando si opera con elementi in pagine master, è opportuno utilizzare un controllo server, anche se per gli elementi non è necessario codice server. Anziché un elemento img, ad esempio, utilizzare un controllo server Image, in modo che ASP.NET possa risolvere gli URL correttamente e sia possibile evitare problemi di manutenzione che potrebbero verificarsi se la pagina di contenuto o la pagina master viene spostata.

Per ulteriori informazioni sulla specificazione dei percorsi per i controlli server ASP.NET, vedere Percorsi del sito Web ASP.NET.

Temi e pagine master

Non è possibile applicare un tema ASP.NET a una pagina master direttamente. Se si aggiunge un attributo di tema alla direttiva @ Master, la pagina genererà un errore quando eseguita.

È tuttavia possibile applicare temi alle pagine master nelle seguenti circostanze:

  • Se un tema è definito in una pagina di contenuto. Poiché le pagine master si risolvono nel contesto delle pagine di contenuto, il tema della pagina di contenuto viene applicato anche alla pagina master.

  • Se il sito complessivo viene configurato per l'utilizzo di un tema includendo la definizione di quest'ultimo nell'elemento Elemento pages (schema delle impostazioni ASP.NET).

Per ulteriori informazioni, vedere Cenni preliminari su temi e interfacce ASP.NET.

Ambiti delle pagine master

È possibile collegare le pagine di contenuto a una pagina master a tre livelli:

  • A livello di pagina   È possibile avvalersi di una direttiva di pagina in ciascuna pagina di contenuto per associare quest'ultima alla pagina master, come illustrato nell'esempio seguente:

    <%@ Page Language="VB" MasterPageFile="MySite.Master" %> 
    
    <%@ Page Language="C#" MasterPageFile="MySite.Master" %> 
    
  • A livello di applicazione   Creando un'impostazione nell'elemento pages del file di configurazione Web.config dell'applicazione, è possibile specificare che tutte le pagine ASP.NET nell'applicazione, ovvero i file aspx, devono essere automaticamente associate a una pagina master. L'elemento può essere simile al seguente.

    <pages masterPageFile="MySite.Master" />
    

    Quando si adotta questa strategia, tutte le pagine ASP.NET dell'applicazione in cui sono presenti controlli Content vengono unite alla pagina master specificata. Se nella pagina ASP.NET non sono inclusi controlli Content, la pagina master non verrà applicata.

  • A livello di cartella   Questa strategia è analoga alla precedente, ma l'impostazione per il file Web.config viene creata in una sola cartella. Le associazioni alla pagina master vengono quindi applicate a tutte le pagine ASP.NET contenute nella cartella.

Vedere anche

Attività

Procedura: fare riferimento a contenuto di pagine master ASP.NET

Procedura: fare riferimento a contenuto di pagine master ASP.NET

Concetti

Eventi nelle pagine master e nelle pagine di contenuto ASP.NET

Pagine master ASP.NET nidificate