Vue d'ensemble des pages maîtres ASP.NET

Mise à jour : novembre 2007

Les pages maîtres ASP.NET vous permettent de créer une disposition cohérente des pages de votre application. Une page maître unique définit l'apparence et le comportement standard que vous souhaitez pour toutes les pages (ou groupe de pages) de votre application. Vous pouvez ensuite créer des pages de contenu individuelles comportant les éléments que vous souhaitez afficher. Lorsque les utilisateurs demandent les pages de contenu, ils fusionnent avec la page maître pour générer une sortie qui associe la disposition de la page maître aux éléments de la page de contenu.

Mode de fonctionnement des pages maîtres

Les pages maîtres se composent réellement de deux parties, la page maître elle-même et une ou plusieurs pages de contenu.

Remarque :

Vous pouvez également imbriquer les pages maîtres. Pour plus d'informations, consultez Pages maîtres ASP.NET imbriquées.

Pages maîtres

Une page maître est un fichier ASP.NET possédant l'extension .master (par exemple, MySite.master) avec une disposition prédéfinie pouvant inclure du texte statique, des éléments HTML et des contrôles serveur. La page maître est identifiée par une directive @ Master spéciale qui remplace la directive @ Page utilisée pour les pages .aspx ordinaires. L'apparence de la directive peut se présenter comme suit.

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

La directive @ Master peut contenir la plupart des mêmes directives qu'une directive @ Control. Par exemple, la directive de la page maître suivante comprend le nom d'un fichier code-behind et affecte un nom de classe à la page maître.

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

Outre la directive @ Master, la page maître contient également tous les éléments HTML de niveau supérieur d'une page tels que html, head et form. Par exemple, sur la page maître, vous pouvez utiliser un tableau HTML pour la disposition, un élément img pour le logo de votre société, du texte statique pour le copyright et des contrôles serveur pour créer la navigation standard de votre site. Vous pouvez utiliser tous les éléments HTML ASP.NET dans votre page maître.

Espaces réservés de contenu remplaçables

Outre le texte statique et les contrôles qui apparaissent sur toutes les pages, la page maître inclut également un ou plusieurs contrôles ContentPlaceHolder. Ces contrôles réservés définissent des régions où le contenu remplaçable apparaîtra. Ensuite, le contenu remplaçable est défini dans les pages de contenu. Une fois que vous avez défini les contrôles ContentPlaceHolder, une page maître peut se présenter comme suit.

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

Pages de contenu

Définissez le contenu des contrôles réservés de la page maître en créant des pages de contenu individuelles qui sont des pages ASP.NET (fichiers .aspx et, éventuellement, des fichiers code-behind) liées à une page maître spécifique. La liaison est établie dans la directive @ Page de la page de contenu par l'insertion d'un attribut MasterPageFile qui pointe sur la page maître à utiliser. Par exemple, une page de contenu peut comporter la directive @ Page suivante, laquelle la lie à la page Master1.master.

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

Dans la page de contenu, créez le contenu en ajoutant les contrôles Content et en les mappant aux contrôles ContentPlaceHolder de la page maître. Par exemple, la page maître peut avoir des espaces réservés de contenu appelés Main et Footer. Dans la page de contenu, vous pouvez créer deux contrôles Content, l'un mappé au contrôle ContentPlaceHolderMain et l'autre mappé au contrôle ContentPlaceHolderFooter, comme l'illustre la figure suivante.

Remplacement du contenu d'espace réservé

Une fois les contrôles Content créés, ajoutez-y du texte et d'autres contrôles. Dans une page de contenu, tout ce qui ne figure pas dans les contrôles Content (à l'exception des blocs de script du code serveur) provoque une erreur. Toutes les tâches que vous effectuez dans la page ASP.NET sont également exécutables dans la page de contenu. Par exemple, vous pouvez générer le contenu d'un contrôle Content à l'aide des contrôles serveur et des requêtes de base de données ou d'autres mécanismes dynamiques.

La page de contenu peut se présenter comme suit :

<% @ 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 directive @ Page lie la page de contenu à une page maître spécifique et attribue un titre à la page qui sera fusionnée dans la page maître. Notez que la page de contenu ne contient aucune autre balise en dehors des contrôles Content. La page maître doit contenir un élément head avec l'attribut afin que le paramètre de titre puisse être fusionné au moment de l'exécution.

Vous pouvez créer plusieurs pages maîtres afin de définir des dispositions différentes pour les différentes parties de votre site, et un jeu de pages de contenu différent pour chaque page maître.

Avantages des pages maîtres

Les pages maîtres fournissent des fonctionnalités que les développeurs ont traditionnellement créées en copiant plusieurs fois le code, le texte et les éléments de contrôle existants ; en utilisant des jeux de frames, des fichiers Include pour les éléments courants, des contrôles utilisateur ASP.NET, etc. Les avantages des pages maîtres sont les suivants :

  • ils vous permettent de centraliser les fonctionnalités communes de vos pages afin que vous puissiez effectuer des mises à jour dans un seul emplacement ;

  • ils facilitent la création d'un ensemble de contrôles et de code et appliquent les résultats sur un ensemble de pages. Par exemple, vous pouvez utiliser les contrôles de la page maître pour créer un menu qui s'applique à toutes les pages ;

  • ils vous offrent un contrôle précis sur la disposition de la dernière page en vous permettant de surveiller comment les contrôles réservés sont affichés ;

  • ils fournissent un modèle d'objet qui vous permet de personnaliser la page maître dans les pages de contenu individuelles.

Comportement à l'exécution des pages maîtres

Au moment de l'exécution, les pages maîtres sont gérées dans l'ordre suivant :

  1. les utilisateurs demandent une page en tapant l'URL de la page de contenu ;

  2. Lorsque la page est atteinte, la directive @ Page est lue. Si la directive référence une page maître, cette dernière est également lue. Si les pages sont demandées pour la première fois, elles sont toutes les deux compilées.

  3. La page maître et le contenu mis à jour sont fusionnés dans l'arborescence du contrôle de la page de contenu.

  4. Le contenu des contrôles Content individuels est fusionné dans le contrôle ContentPlaceHolder correspondant de la page maître.

  5. La page fusionnée obtenue est affichée pour le navigateur.

Ce processus est illustré dans le diagramme ci-dessous.

Pages maîtres au moment de l'exécution

Du point de vue de l'utilisateur, les pages maître et de contenu associées forment une page unique et discrète. L'URL de la page est celle de la page de contenu.

Du point de vue de la programmation, les deux pages agissent comme des conteneurs distincts de leurs contrôles respectifs. La page de contenu agit comme un conteneur de la page maître. Toutefois, vous pouvez référencer des membres de page maître publics à partir du code de la page de contenu, comme le décrit la section suivante.

Notez que la page maître devient une partie de la page de contenu. En effet, la page maître agit pratiquement de la même manière que le contrôle utilisateur (comme un enfant de la page de contenu et comme un conteneur de cette page). Dans ce cas, la page maître représente néanmoins le conteneur de tous les contrôles serveur affichés pour le navigateur. L'arborescence de contrôle d'une page maître et de contenu fusionnée peut se présenter comme suit :

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)

Ce diagramme est simplifié. Si la page de contenu ne dispose pas des contrôles Content correspondants, la page maître peut elle disposer de balises et de contrôles dans les contrôles ContentPlaceHolder.

En général, cette structure n'a aucune incidence sur la manière de construire ou de programmer vos pages. Toutefois, dans certains cas, si vous affectez à la page maître une propriété globale, celle-ci peut affecter le comportement de la page de contenu, parce que la page maître est la parente la plus proche des contrôles de la page. Par exemple, si vous affectez la valeur true à la propriété EnableViewState de la page de contenu et que vous avez affecté la valeur false à la même propriété de la page maître, l'état d'affichage est désactivé parce que le paramètre de la page maître a la priorité.

Chemins de la page maître et de contenu

Lorsqu'une page de contenu est demandée, son contenu est fusionné avec la page maître, et la page s'exécute comme une page de contenu. Par exemple, si vous obtenez la propriété CurrentExecutionFilePath de l'objet HttpRequest, qu'il s'agisse d'un code de page de contenu ou de page maître, le chemin représente l'emplacement de la page de contenu.

La page maître et la page de contenu ne doivent pas figurer dans le même dossier. Tant que l'attribut MasterPageFile de la directive @ Page de la page de contenu peut résoudre une page .master, ASP.NET peut fusionner les pages maître et de contenu pour afficher une page unique.

Référencement des Ressources externes

Les pages maître et de contenu peuvent contenir des contrôles et des éléments qui référencent des ressources externes. Par exemple, ces deux pages peuvent contenir des contrôles d'image qui référencent des fichiers image, ou encore des points d'ancrage qui référencent d'autres pages.

Le contexte des pages maître et de contenu fusionnées est celui de la page de contenu. Cela peut affecter la manière de spécifier les URL des ressources, par exemple les fichiers image et les pages cibles, dans les points d'ancrage.

Contrôles serveur

Dans les contrôles serveur des pages maîtres, ASP.NET modifie de manière dynamique les URL des propriétés qui référencent des ressources externes. Par exemple, vous pouvez placer un contrôle Image sur une page maître et affecter à sa propriété ImageUrl une valeur relative par rapport à la page maître. Au moment de l'exécution, ASP.NET modifie l'URL afin qu'elle soit correctement résolue dans la page de contenu.

ASP.NET peut modifier les URL dans les cas suivants :

  • l'URL est une propriété d'un contrôle serveur ASP.NET ;

  • la propriété est marquée en interne dans le contrôle comme étant une URL ; La propriété est marquée avec l'attribut UrlPropertyAttribute. En pratique, les propriétés du contrôle serveur ASP.NET couramment utilisées pour référencer des ressources externes sont marquées de cette manière.

Autres éléments

ASP.NET ne peut pas modifier les URL des éléments qui ne sont pas des contrôles serveur. Par exemple, si vous utilisez un élément img d'une page maître et que vous avez affecté son attribut src à une URL, ASP.NET ne modifie pas cette dernière. Dans ce cas, l'URL sera résolue dans le contexte de la page de contenu et créée en conséquence.

En général, lorsque vous travaillez avec les éléments des pages maîtres, il est recommandé d'utiliser un contrôle serveur, même pour les éléments qui ne requièrent pas de code serveur. Par exemple, au lieu d'utiliser un élément img, utilisez un contrôle serveur Image. Ainsi, ASP.NET peut résoudre des URL correctement, ce qui peut vous éviter des problèmes de maintenance qui risquent de survenir si vous déplacez la page maître ou de contenu.

Pour plus d'informations sur la spécification des contrôles serveur ASP.NET, consultez Chemins d'accès aux sites Web ASP.NET.

Pages maîtres et thèmes

Vous ne pouvez pas appliquer directement de thème ASP.NET à une page maître. Si vous ajoutez un attribut de thème à la directive @ Master, la page déclenche une erreur lorsqu'elle s'exécute.

Toutefois, les thèmes sont appliqués aux pages maîtres dans les circonstances suivantes :

  • si un thème est défini dans la page de contenu. Les pages maîtres sont résolues dans le contexte des pages de contenu. Par conséquent, le thème de la page de contenu est également appliqué à la page maître ;

  • si le site est configuré dans son ensemble pour utiliser un thème en incluant une définition de thème dans l'élément pages, élément (Schéma des paramètres ASP.NET).

Pour plus d'informations, consultez Vue d'ensemble des thèmes et des apparences ASP.NET.

Portée des pages maîtres

Vous pouvez joindre des pages de contenu à une page maître à trois niveaux :

  • Au niveau de la page   Vous pouvez utiliser une directive de page dans chaque page de contenu pour la lier à une page maître, comme dans l'exemple de code suivant.

    <%@ Page Language="VB" MasterPageFile="MySite.Master" %> 
    
    <%@ Page Language="C#" MasterPageFile="MySite.Master" %> 
    
  • Au niveau de l'application   En configurant l'élément pages du fichier de configuration de l'application (Web.config), vous pouvez spécifier que toutes les pages ASP.NET (fichiers .aspx) de l'application se lient automatiquement à une page maître. L'élément peut se présenter de la manière suivante.

    <pages masterPageFile="MySite.Master" />
    

    Si vous utilisez cette stratégie, toutes les pages ASP.NET de l'application disposant des contrôles Content sont fusionnées avec la page maître spécifiée. Si une page ASP.NET ne contient pas les contrôles Content, la page maître n'est pas appliquée.

  • Au niveau du dossier   Cette stratégie est semblable à la liaison au niveau de l'application, sauf que vous effectuez la configuration dans un fichier Web.config d'un dossier unique. Les liaisons de la page maître s'appliquent ensuite aux pages ASP.NET de ce dossier.

Voir aussi

Tâches

Comment : référencer le contenu de la page maître ASP.NET

Comment : référencer le contenu de la page maître ASP.NET

Concepts

Événements dans les pages maîtres et de contenu ASP.NET

Pages maîtres ASP.NET imbriquées