Musicista Trombettista
Insegnante Editore

Creare Master Page nidificate
In questa pagina si parla di: asp.NET 4
 
Indice

Introduzione

Può capitare di avere la necessità di nidificare una MasterPage all'interno di un'altra MasterPage, dove la prima faccia riferimento all'altra come sua MasterPage. Avere MasterPage nidificate permette di realizzare pagine complesse in cui sia necessario gestire i contenuti a diversi livelli: per esempio le pagine di questa sezione "Sviluppo" del sito sono gestite con due MasterPage nidificate.


Pronti per partire

Una MasterPage figlia ha la medesima estensione .master come tutte le MasterPage, con due accorgimenti aggiuntivi: come prima cosa occorrerà aggiungere un riferimento alla pagina master genitore alla direttiva @master [1], per seconda occorrerà creare un nuovo elemento ContentPlaceHolder figlio all'interno del ContentPlaceHolder già referenziato alla pagina master genitore. Il ContentPlaceHolder figlio sarà il riferimento per la pagina aspx.


Master Page padre

Ecco una struttura di esempio della MasterPage principale del sito: sono presenti due ContentPlaceHolder, il primo per "riempire" la sezione <head>, chiamato HeadContent, e il secondo per la sezione <body>, chiamato MainContent:

 

<%@ Master Language="VB" AutoEventWireup="false" CodeBehind="Site.master.vb" Inherits="Prova.Site" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">

<head runat="server">
       
   <asp:ContentPlaceHolder ID="HeadContent" runat="server"/>

</head>

<body>

   <form runat="server">
             
       <asp:ContentPlaceHolder ID="MainContent" runat="server"/>

   </form>

</body>
</html>

 

Master Page figlia

Aggiungere al progetto una nuova MasterPage, ovvero clic con il pulsante destro sul progetto, [Aggiungi], [Nuovo elemento...], ecc...
E' importante, come prima cosa, aggiungere questo riferimento alla MasterPage padre

 

MasterPageFile="~/Site.Master"

 

nella parte dichiarativa della nuova MastrPage figlia appena creata:

 

<%@ Master MasterPageFile="~/Site.Master" Language="VB" AutoEventWireup="false" CodeBehind="~/Child.master.vb" Inherits="Prova.Child" %>

 

La pagina sara strutturata come segue. Da notare come all'interno del MainContent sia stato creato un nuovo ContentPlaceHolder figlio:

 

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>


<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">

<asp:ContentPlaceHolder ID="ChildContent1" runat="server" />

</asp:Content>

 

Pagina .aspx con il contenuto

A questo punto se clicchiamo con il destro sulla MasterPage figlia e [Aggiungi pagina conenuto] otteniamo una pagina .aspx con la seguente struttura. All'interno del ChildContent possiamo metter il contenuto vero e proprio della pagina:

 

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Sviluppo.Master" CodeBehind="NuovaWebForm.aspx.vb" Inherits="Prova.NuovaWebForm" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ChildContent1" runat="server">
</asp:Content>

 

Quando al server arriva una richiesta per la pagina NuovaWebForm.aspx inizia la sua generazione, con contenuti più o meno dinamici, da parte del framework, pagina che verrà poi "incollata" alla MasterPage figlia. Il contenuto di quest'ultima sarà elaborato, anche questa con informazioni che possono essere o meno dinamiche. A fase ultimata la pagina risultante sarà "incollata" alla MasterPage padre per l'elaborazinoe finale e l'invio al browser [2].



Link correlati

Nested ASP.NET Master Pages - MSDN Library - ASP.NET Web Projects


Note

[1] Nella parte "dichiarativa" della pagina <%@ Master ... %>
[2] Vederla così... capisco che sia "parecchio" semplificata... ma come si dice, per capirsi!

 
 
 
Commenti
Lascia un commento
 
Nome:
Cognome:
e-mail:
Commento:
Con l'invio del modulo, dichiaro di avere letto l'informativa sulla privacy qui riportata, e acconsento al trattamento dei miei dati secondo le modalità indicate, per le finalità di cui al punto 1 dell'informativa.
 
Captcha
  Specificare i caratteri visualizzati nell'immagine.


Se i caratteri nell'immagine sono di difficile comprensione prova ad aggiornare l'immagine.