Master Pages e Content Pages: l'evoluzione della specie con ASP.NET 2.0

di Riccardo Golia, in ASP.NET 2.0, ADO.NET, Master Pages,

Nella realizzazione di applicazioni Web si è sempre cercato di sfruttare al meglio la possibilità di modularizzare le pagine, al fine di minimizzare il lavoro svolto e di facilitare il riuso del codice.
Con Classic ASP l'inclusione di file sfruttando SSI (Server Side Includes) è stato il meccanismo utilizzato per ottenere lo scopo, con tutti i limiti del caso. Questo approccio è stato in seguito soppiantato dagli User Controls di ASP.NET 1.x, tramite cui è stato possibile trattare ogni singola porzione di una pagina ASPX come un controllo custom definito dallo sviluppatore.
Per risolvere e superare i limiti della soluzione basata su User Controls, in ASP.NET 2.0 (Whidbey) è stato introdotto un nuovo meccanismo basato sulle Master Pages e sulle Content Pages.
Una master page rappresenta di fatto una sorta di template, che, oltre a contenuti dinamici e statici, contiene alcune aree (rappresentate da altrettanti controlli di tipo ContentPlaceHolder) riempibili con i contenuti definiti nelle varie sezioni delle content pages associate. Per un sito Web è possibile definire più master pages; questo permette di poter disporre di template diversificati per ciascuna sezione del sito.

L'esempio proposto mostra una master page che include tre ContentPlaceHolder. Come si può notare, la master page contiene anche gli elementi statici, comuni a tutte le content pages a cui è associata. Nelle content pages si dichiara la dipendenza alla master page nella direttiva @Page tramite l'attributo MasterPageFile.

MASTER PAGE [MasterPage.master]

<%@ 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 runat="server">
  <title>ASPITALIA - Master Pages Script</title>
  <link type="text/css" rel="Stylesheet" href="Styles.css" />
</head>
<body>
  <form runat="server">
    <div class="clsHeader">
      <asp:ContentPlaceHolder ID="MasterHeader" Runat="server"></asp:contentplaceholder>
    </div>
    <hr />
    <div class="clsBody">
      <asp:ContentPlaceHolder ID="MasterBody" Runat="server"></asp:ContentPlaceHolder>
    </div>
    <hr />
    <div class="clsFooter">
      <asp:ContentPlaceHolder ID="MasterFooter" Runat="server"></asp:ContentPlaceHolder>
    </div>
  </form>
</body>
</html>

CONTENT PAGE [ContentPage.aspx]
<%@ Page Language="c#" MasterPageFile="MasterPage.master" %>
<asp:Content ID="PageHeader" Runat="server" ContentPlaceHolderID="MasterHeader">
  <div>HEADER</div>
</asp:Content>
<asp:Content ID="PageBody" Runat="server" ContentPlaceHolderID="MasterBody">
  <div>BODY</div>
</asp:Content>
<asp:Content ID="PageFooter" Runat="server" ContentPlaceHolderID="MasterFooter">
  <div>FOOTER</div>
</asp:Content>

Per approfondimenti su ASP.NET 2.0 si veda
http://aspdotnet2.aspitalia.com/

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi