ASP.Net 2.0 : les Master Pages

Date de publication : 11/07/2005

Par Ronald VASSEUR (autres articles)
 

Dans cet article nous allons découvrir une grande nouveauté d'ASP.Net 2.0 : les master pages. Notre but ici ne sera pas d'aller dans le détail mais plutôt d'appréhender ce que cela va changer dans notre façon de concevoir nos sites et quels sont les bénéfices que l'on peut en tirer.


Prérequis
1. Le principe de master pages
2. Création d'une master page
3. Création d'une page héritant d'une master page
Conclusion


Prérequis

  • Visual Studio 2005 Beta 2 ou Visual Web Developer 2005 Express Edition Beta 2 au minimum
  • Internet Information Services 5.0 ou supérieur
  • Framework .Net 2.0

1. Le principe de master pages

Une master page est en fait une page qui va contenir des éléments s'affichant de la même manière sur une partie ou sur la totalité de votre site, et aussi des éléments variant suivant chaque page du site (contacts, news, téléchargements…). Une master page va en fait être composée de la partie commune de l'interface pour un ensemble donné de pages. Avec ASP.Net 1.1 nous étions souvent obligés de faire un simple copier/coller de certains éléments comme des menus, des logos ou autre bannière sur chaque page, ici les master pages vont vous autoriser à déterminer des zones "fixes", une sorte de squelette commun de page, et des zones de contenu qui vont être différentes selon la page, zones qui seront délimitées par des ContentPlaceHolder.

Les éléments de la master page seront ainsi créés et disposés dans une page qui portera l'extension .master, ensuite les pages de contenues (content pages) viendront compléter les zones dites de contenu (délimitées par des composants ContentPlaceHolder) sur cette même master page.

L'avantage immédiat qui découle de cela est que nous n'aurons plus qu'à créer une seule master page pour intégrer les éléments inchangés (bannière, entête, menus…) sur une étendue de pages données. De plus, si nous voulons modifier un élément de l'interface de notre site nous n'aurons qu'à le faire qu'une seule fois dans la master page, toutes les pages l'utilisant seront ainsi immédiatement modifiées.

Je le concède volontier, après la lecture de cette seule explication les master pages n'apparaissent peut être pas comme une nouveauté révolutionnaire, mais avec des explications plus concrètes dans les paragraphes suivant vous allez réellement prendre conscience de la souplesse et de la productivité apportées par les master pages.


2. Création d'une master page

Une bonne démonstration valant souvent mieux que de longues explications passons tout de suite à la pratique. Pour cela vous devez disposer de Visual Studio 2005 Beta 2 ou de Visual Web Developer 2005 Express Edition Beta 2 au minimum.

Tout d'abord vous devez créer une application ASP.Net 2.0, pour cela cliquez sur "File" puis sur "New Web Site", créez alors un projet de type "ASP.Net Web Site". Vous avez alors un site web contenant une page default.aspx. Dans l'explorateur de solution, cliquez avec le bouton droit puis choisissez "Add new item". Choisissez alors "Master Page", donnez lui le nom que vous souhaitez (ici maMasterPage), vous pouvez remarquer qu'elle porte l'extension .master. Enfin, cliquez sur "Add". La fenêtre suivante apparaît alors :

Sélection de la master page
Remarque : la master page portant l'extension .master ne sera pas directement accessible par les clients, elle ne sera en fait accessible que par les pages de votre site héritant de cette master page. Lors de la connexion d'un client la page de votre site sera en fait réalisée par "assemblage" de la master page et de la page héritant de celle-ci.
Voici le code d'une master page contenant une ContentPlaceHolder :

Code d'une master page
<%@ Master Language="VB" CodeFile="maMasterPage.master.vb" Inherits="maMasterPage" %> <!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>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </asp:contentplaceholder> </div> </form> </body> </html>
Une fois la page créé dans Visual Studio vous n'avez qu'à placer les différents contrôles sur votre page et vous occuper du design, la seule vraie différence va être que vous allez placer des contrôles ContentPlaceHolder là où vous souhaitez que le contenu soit modifiable. En fait, les pages de votre site vont hériter de la master page, elles hériteront donc du desgin de celle-ci.

Pour simplifier notre exemple nous utiliserons un seul contrôle ContentPlaceHolder, mais sachez que vous pouvez en mettre plusieurs dans une seule et même master page, cela dépendra évidemment de vos besoins.

Pour ajouter un ContentPlaceHolder, rien de compliqué, vous avez juste à faire un glisser/déposer depuis la boîte à outil de Visual Studio 2005. Vous avez donc, d'un point de vue design, une page aspx qui est standard, sauf qu'elle contiend des contrôles ContentPlaceHolder.


3. Création d'une page héritant d'une master page

Maintenant que nous avons créé une master page, nous pouvons créer les pages de notre site qui vont en hériter, pour cela rien de difficile, il suffit juste de créer une nouvelle WebForm, et de cocher la case "Select master page", à l'étape suivante Visual Studio va vous demander de sélectionner la master page à utiliser avec cette WebForm. Vous pouvez alors remarquer que Visual Studio vous affiche une page qui est identique à la master page de laquelle elle hérite, mais cette fois ci, tout le contenu de la master page est "grisé" et non modifiable, et vous pouvez par contre modifier le contenu du, ou des ContentPlaceHolder intégré(s) dans votre page.

Voici donc la démarche détaillée qu'il vous faut suivre : cliquez avec le bouton droit sur votre projet dans l'explorateur de solution, puis sur "Add new item", sélectionnez WebForm, nommez la "accueil.aspx", cochez "Select Master Page". Cliquez sur "Add", une autre fenêtre s'ouvre alors, vous demandant d'indiquer quelle master page vous souhaitez utiliser, sélectionnez "maMasterPage.master".

Sélection de la master page à associer

Le code d'une page héritant d'une master page est réduit, il ne contient pas les balises que l'on retrouve dans une page aspx normale, en effet, puisque elles sont déjà présentes dans la master page. Voici une copie du code contenue dans une "page fille" vide :

Code d'une page héritant d'une master page
<%@ Page Language="VB" MasterPageFile="~/maMasterPage.master" AutoEventWireup="false" CodeFile="accueil.aspx.vb" Inherits="accueil" title="Untitled Page" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"></asp:Content>
A cet instant votre explorateur de solution doit correspondre à cette image :

Explorateur de solution
Placez les contrôles et les éléments que vous souhaitez dans la zone ContentPlaceHolder, enregistrez les modifications. Définissez la page accueil.aspx comme page de démarrage de votre application , puis appuyez sur F5. Et là miracle !! Votre navigateur s'ouvre et votre page accueil.aspx s'affiche, elle est composée de votre master page et du contenu de la page accueil.aspx qui en hérite, c'est-à-dire du contenu du ou des ContentPlaceHolder.

Vous pouvez ainsi créer autant de pages héritant d'une master page que vous le souhaitez, vous retrouvez dès lors le "squelette" de la master page dans chaque "page fille" de celle-ci.


Conclusion

Voilà vous venez de créez votre première master page, vous pouvez facilement imaginer les avantages découlants de cette nouveauté d'ASP.Net 2.0, vous pourrez ainsi avoir une productivité accrue dans la création et la mise à jour de vos sites. On peut envisager utiliser les masters pages en tant que modèle, que squelette, de tout ou partie de votre site, mais aussi, par exemple, pour concevoir différentes versions de pages en fonction des navigateurs clients.

De plus, on se rend donc compte, que même s'il on utilise une master page, cela ne change quasiment rien des méthodes de travail pour le développeur ou le graphiste dans l'édition de sa page, ce qui est fort appréciable.

J'espère qu'au travers de cette courte présentation vous aurez aperçu la puissance et la souplesse que peuvent vous apportez les master pages. Je vous donne d'ores et déjà rendez-vous dans un prochain article.

Un grand merci à Pharaonix pour la relecture de cet article.