Вы находитесь на странице: 1из 24

ASP.NET 2.

0 Applications Web
Essentiel

Objectifs :
Connatre le fonctionnement du langage ASP.NET Apprendre dvelopper des applications Web Dvelopper des services We

Version : 0.9 ID Booster : 697 Release Date : 05/09/2008


Page 1 / 2

Sommaire
1. INTRODUCTION ASP.NET 2.0 ................................................................................................................. 3 1.1. GENERALITES .................................................................................................................................................. 3 1.2. TRAITEMENT DES REQUETES ............................................................................................................................ 3 1.3. NOTION DE CODE-BEHIND ET COMPILATION ..................................................................................................... 4 1.4. ASP.NET ET VISUAL STUDIO .......................................................................................................................... 6 1.5. CYCLE DE VIE .................................................................................................................................................. 8 1.6. OBJETS SERVEUR ............................................................................................................................................. 8 1.6.1. Lobjet Page .............................................................................................................................................. 9 1.6.2. Lobjet Application .................................................................................................................................. 10 1.6.3. Lobjet Session......................................................................................................................................... 11 1.6.4. Lobjet Cookies ........................................................................................................................................ 11 1.6.5. Lobjet Request ........................................................................................................................................ 12 1.6.6. Lobjet Response ..................................................................................................................................... 12 2. CONTROLES SERVEUR.............................................................................................................................. 13 2.1. GENERALITES ................................................................................................................................................ 13 2.2. PRESENTATION DE QUELQUES CONTROLES .................................................................................................... 13 2.3. INTERACTION CLIENT/SERVER....................................................................................................................... 14 2.4. LE PRINCIPE DE POSTBACK ............................................................................................................................ 15 2.5. VALIDATION DE CONTROLES.......................................................................................................................... 16 3. FRAMEWORK DE PAGE ............................................................................................................................ 20 3.1. LES MASTERPAGES ....................................................................................................................................... 20 3.2. STYLE, SKIN, THEMES.................................................................................................................................... 22 4. FICHIERS DE CONFIGURATION ............................................................................................................. 24 4.1. ORGANISATION DES FICHIERS ........................................................................................................................ 24 4.2. PRISE EN COMPTE DES MISES A JOUR .............................................................................................................. 24

Essentiel ASP.NET 2.0 Applications Web

3 / 24

1. Introduction ASP.NET 2.0


Dj dans sa premire mouture, ASP.NET avait t conu dans loptique damliorer la productivit des dveloppeurs dapplications web dynamiques grce de nombreuses fonctionnalits telles que les contrles serveur utilisateur, et la possibilit dutiliser une grande partie des langages .NET. Dans cette seconde version, Microsoft relev avec succs le challenge daugmenter la rapidit et la simplicit de dveloppement en diminuant jusqu' 70% la quantit de code crire pour raliser une application web, tout en multipliant le nombre de fonctionnalits.

1.1. Gnralits
Lobjectif principal dASP.NET 2.0 est donc de simplifier grandement la ralisation dapplications web dynamiques. Ceci est possible, notamment grce au concept de programmation vnementielle, bas sur celui que lon retrouve lors du dveloppement dapplications Windows Forms. Une page est un formulaire, contenant des contrles serveur (une zone de saisie de texte, un bouton, une liste, ). Chacun de ces contrles possde un ensemble dvnements auxquels il est possible dassocier un comportement. Les pages ASP.NET (dextension .aspx) vont donc contenir les diffrents lments susceptibles de gnrer un rendu HTML, des lments HTML, ainsi que le code correspondant aux vnements. Ce code doit tre crit dans un des langages du Framework .NET 2.0 (C#, VB.NET, etc.). Chaque page aspx sera compile en une librairie (dll), et sera excute par la CLR (Common Language Runtime), dans le but de gnrer une page HTML, qui sera renvoye au client.

1.2. Traitement des requtes


Lorsquun client appelle une page aspx, cest le serveur web qui traite la requte. Il sagit en gnral dun serveur IIS (Internet Information Services), mais le systme de filtre ISAPI permet dhberger de applications web dans dautres serveur, notamment le serveur Webdev.Webserver.EXE bas sur le serveur Cassini, qui est utilis pour dbuguer vos applications web avec Visual Studio. Voici un schma simplifi du traitement dune requte aspx par IIS 5.0 :

Essentiel ASP.NET 2.0 Applications Web

4 / 24

Le serveur transmet la requte au filtre ISAPI (aspnet_isapi.dll). Le filtre transmet la demande au processus aspnet_wp.exe (qui est indpendant du serveur). aspnet_wp gnre la page HTML rsultant de la requte, et la renvoie au serveur IIS par lintermdiaire du filtre ISAPI. Enfin, la page est retourne au client. Toutes vos pages aspx sont compiles. Le modle de compilation dASP.NET 2.0 est tel que chacune de vos pages ne seront compiles quune seule fois, jusqu' la prochaine modification des fichiers sources. Lavantage dune telle solution est que seul le premier appel une page sera long. Linconvnient est bien videmment le fait que le premier utilisateur excutant la page aprs une modification des sources devra attendre le traitement de la compilation avant davoir une rponse. Il existe une solution simple pour remdier ce problme : la prcompilation. Vous pouvez en effet compiler une application web vous-mme aprs une modification des sources. Pour cela, il suffit dappeler le HTTP Handler http://chemindelapplication/precompile.axd. (Un HTTP Handler est un moyen de grer des requtes qui effectuent un traitement sans pour autant forcment renvoyer de code HTML).

1.3. Notion de code-behind et compilation


Nous avons vu en introduction quASP.NET utilise le mode de programmation vnementielle. Le code qui gre les vnements des contrles serveur contenus dans une page aspx peut tre directement dans cette page il est appel code-inline. Plus gnralement, ces instructions sont places dans un fichier part ; on parle alors de code-behind. Comment est-ce que cela fonctionne ? Un fichier aspx possde une directive Page. Cette directive permet, entre autre, de configurer, via lattribut CodePage, le chemin vers le fichier contenant le code behind qui est nomm comme son pendant aspx, suffix de lextension correspondant au langage utilis pour lcrire. Ce fichier contient tout simplement une classe partielle. Par exemple, si le code behind dune page Default.aspx est crit en C#, le fichier contenant ce code sera nomm Default.aspx.cs.

Essentiel ASP.NET 2.0 Applications Web Comment se passe la compilation ?

5 / 24

ASP.NET 2.0 gnre une classe partielle partir du fichier aspx. Cette classe partielle ainsi que celle contenant le code-behind sont fusionnes en une seule classe, qui dvire de System.Web.UI.Page. Cette classe est alors compile par ASP.NET lors de la premire excution (ou bien lors de lappel du Handler http precompile.axd). Voici un schma rcapitulant ce principe :

System.Web.UI.Page Classe partielle gnre partir du fichier .aspx Fusionn en une seule classe qui drive de Page

Classe partielle contenant le code-behind

MaClasse.dll

Compil par ASP.NET lexcution

Pour illustrer les notions de code-inline et code-behind, voici un exemple de chaque : Code Inline
<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> //Le code C# sera plac ici </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> </div> </form> </body> </html>

Essentiel ASP.NET 2.0 Applications Web

6 / 24

Code Behind Fichier Default.aspx


<%@ Page Language="C#" AutoEventWireup="true" Inherits="_Default" %> CodeFile="Default.aspx.cs"

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div></div> </form> </body> </html>

Code Behind Fichier Default.aspx.cs


using using using using using using using using using System; System.Data; System.Configuration; System.Web; System.Web.Security; System.Web.UI; System.Web.UI.WebControls; System.Web.UI.WebControls.WebParts; System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //Le code C# plac ici sexcutera lors du chargement } }

1.4. ASP.NET et Visual Studio


Visual Studio est une des raisons qui fait que crer une application web avec ASP.NET est trs simple. Il met en effet la disposition du dveloppeur une interface graphique pour lorganisation des composants graphiques en Gliss/Dpos, de la mme faon quen dveloppement dapplication WinForms. Visual Studio .NET 2005 apporte une diffrence au niveau de la cration dun site web. Ceci se fait diffremment de la cration dun projet standard, contrairement ce que proposait la version 2003.

Essentiel ASP.NET 2.0 Applications Web

7 / 24

Une nouveaut non ngligeable est le fait que lon puisse choisir de dvelopper une application web en la stockant sur le systme de fichier, et non plus uniquement via IIS :

Visual Studio cr pour vous un certain nombre de fichier et rpertoire, que vous pouvez voir via lexploreur de solution :

Notez le rpertoire App_Data qui vous permettra de stocker des bases de donnes.

Essentiel ASP.NET 2.0 Applications Web

8 / 24

1.5. Cycle de vie


Malgr ce que lon pourrait imaginer, le cycle de vie dune application web na rien voir avec la dure pendant laquelle une page est disponible. Il sagit en fait de lensemble des tapes par lesquelles passe une page aspx lors du traitement dune requte. Ces tapes peuvent tre regroupes en 6 grandes parties : La construction : o Correspond lappel des constructeurs Linitialisation : o Cette tape initialise le traitement de la requte, dtermine si elle est de type PostBack ou non (cf. 2.4), spcifie la page matre (cf 3.1) La restauration des tats : o Comme son nom lindique, cette tape permet de restaurer les tats des diffrents contrles de la page Le chargement de la page : o Cette tape dclenche entre autre, la validation des contrles (cf.2.5). Cest galement ce moment que sont levs les vnements de PostBack Sauvegarde et cration du rendu des contrles Finalisation : o Cette dernire tape est destine la libration des ressources non manages, telles quune connexion une base de donnes

Connatre ce cycle de vie peut tre intressant lorsque lon souhaite optimiser ou redfinir un comportement par dfaut. Ces tapes tant des vnements, des mthodes y sont abonnes par dfaut. La plupart de ces mthodes sont virtuelles, vous pouvez donc en redfinir le contenu, pour ladapter vos besoins. Plutt que de redfinir ces mthodes, vous pouvez vous abonner certains vnements.

1.6. Objets serveur


Dans le chapitre sur le fonctionnement dune application Web ASP.NET, nous voyons les processus de communication de ce type dapplication, bass sur larchitecture client / serveur. Ce type darchitecture dfinit les communications comme tant des messages de requtes et de rponses, les requtes tant envoyes par le client et les rponses, par le serveur (dans le cadre dune application ASP.NET, les serveurs des Serveurs Web). Un message de requte contient une multitude dinformations permettant au Serveur Web de traiter au mieux la demande. Parmi les informations envoyes, on peut trouver : Ladresse URL de la page demande Le nom du navigateur client Ladresse IP du client

Le dveloppeur dune application Web peut tout moment accder ces informations partir dobjets serveur. Dans une application ASP.NET, lensemble des objets que nous utilisons sont issus de lespace de nom System.Web. Cet espace de noms fournit directement des classes pour les objets Application, Cache, Cookies, Request et Response que nous verrons dans ce chapitre.

Essentiel ASP.NET 2.0 Applications Web

9 / 24

Concernant les objets Session et Page, leur dfinition rside respectivement dans les espaces de noms System.Web.SessionState et System.Web.UI.

N.B : Chacun des objets que nous verrons fournit des proprits et des mthodes permettant daccder dautres objets (entre eux). Voyons-les dun peu plus prs.

1.6.1. Lobjet Page


Nous ne cessons de le rpter : en .NET tout est objet. Cest--dire que pour .NET, une page Web est aussi un objet. Lobjet Page permet de contrler linterface utilisateur de lapplication Web. Il possde galement des proprits et des mthodes permettant daccder aux objets de linterface utilisateur (Objet Cache, Request, Response, Session, ) Quand un message de requte est transmis au serveur Web IIS, linformation sera transmise ASP.NET qui cr ensuite une instance de lobjet Page partir des informations reues, puis affiche la page. Quand une page de lapplication est demande, ASP.NET cre une instance de la page Web, et il est possible dajouter des vnements la page afin de contrler linterface et dinteragir avec lutilisateur. Plusieurs vnements sont disponibles pour lobjet Page. Vous pouvez les lister dans longlet Proprits de votre Objet Page et en cliquant sur le bouton : .

Essentiel ASP.NET 2.0 Applications Web

10 / 24

Lvnement le plus important est lvnement Load . Visual Studio .Net cre dailleurs automatiquement une fonction Page_Load associe lvnement Load . Vous pourrez initialiser cet endroit vos composants et variables, car lvnement Load sera appel chaque chargement de votre page.

1.6.2. Lobjet Application


Dans la hirarchie des objets dune application Web, cest lobjet Application qui est situ au niveau le plus lev. Outre la configuration de lapplication et la sauvegarde des informations dtat, il fournit des proprits et des mthodes permettant daccder aux objets Request, Response, Server, Session, etc). Les informations dtat ou les variables dtat de lobjet Application peuvent stocker des lments qui pourront tre utiliss et exploits par tous les utilisateurs de lapplication. La classe HttpApplication fournit les mthodes, les proprits et les vnements communs aux objets Applications dans une application ASP.NET. Des vnements associs lapplication ASP.NET elle-mme sont dfinis dans le fichier Global.asax.cs (quand vous passez au mode code du fichier Global.asax). (Nous en parlons lors de la prsentation du fichier Global.asax un peu plus haut). Un petit exemple : //Execut chaque requte de lutilisateur
protected void Application_BeginRequest (Object sender, EventArgs e) {

//si le navigateur est IE


if(Request.UserAgent.IndexOf("MSIE") {

//traitement
} }

Dans lexemple, nous utilisons les objets Request et Browser de lobjet Application afin de dterminer si le navigateur est Internet Explorer.

Essentiel ASP.NET 2.0 Applications Web

11 / 24

1.6.3. Lobjet Session


Nous le disions un peu plus haut, lespace de nom System.Web.SessionState contient des classes pour lobjet Session. Grce celles-ci, nous allons pouvoir grer (crer, sauvegarder, restaurer) des lments ltat de Session. Ltat de session est un tat dans lequel les variables dtat (Session) stockent des lments que lon souhaite stocker localement pour une session courante (Une session est propre un utilisateur). Cet tat est pratique (par exemple pour les utilisateurs qui ne supportent pas les cookies). Parmi les classes existantes et proposant un support de lobjet Session, il y a la classe HttpSessionState qui permet de grer ltat de session. Voici un petit exemple montrant comment crer une session :
Session["MySession"] = "MyValue" ;

Outre bien sr la cration de sessions, vous allez pouvoir grer leur dure de vie, leur mode, leur SessionID, etc ASP.NET gre par dfaut ltat de Session pour chaque page de votre application. Il peut tre possible parfois que certaines pages nen aient pas besoin. Vous avez donc la possibilit de dsactiver cette fonctionnalit afin damliorer les performances. Ltat de Session peut tre dsactiv de cette faon : - Pour une page Web : Dans la fentre de Proprits de la page, changer la valeur de la proprit EnableSessionState False. - Pour toute lapplication : Dans le fichier Web.config, la balise sessionState et lattribut mode false Ex : <sessionState mode="False"

1.6.4. Lobjet Cookies


Lespace de nom System.Web fournit directement des classes pour lobjet Cookies. Pour rappel, les cookies permettent de stocker des informations sur lordinateur du client. Cependant, contrairement aux sessions, les cookies peuvent tre refuss par le navigateur du client. (Cela peut tre problmatique lors de vos dveloppements). La classe HttpCookies permet de crer et manipuler des cookies. Nous aurons aussi la possibilit avec dautres objets de pouvoir tendre la gestion des cookies (support des cookies, ajout des cookies dans la collection de cookies, etc). Voici un exemple pouvant illustrer cet objet :
//Execut au chargement de notre page private void Page_Load(Object sender, EventArgs e) { //si il sagit de la premire publication de notre page if(!IsPostBack) { if(Request.Browser.Cookies) {//Si le browser accepte les cookies if((Request.Cookies["MyCookie"]) != null) { //si cookie existe //traitement } else { //on cr le cookie HttpCookie cookie = HttpCookie("cookieName"); cookie.Value = "myValue";

Essentiel ASP.NET 2.0 Applications Web


//Ajout du cookie a la collection de cookies Response.Cookies.Add(cookie); } } } }

12 / 24

1.6.5. Lobjet Request


Lobjet Request contient des informations envoyes par le navigateur du client lorsquil envoie une requte au serveur Web. Il possde comme dautres objets vus prcdemment des proprits et mthodes qui daccder dautres objets accompagnant les requtes envoyes (Objets Cookies par exemple). Vous avez la possibilit davoir accs la valeur de contrles web en utilisant lobjet Request avec la syntaxe suivante : Request[id de votre contrle] ; Dpendant aussi de la mthode denvoi de vos donnes au travers de vos formulaire, vous pourrez utiliser les collections Form ou QueryString de lobjet Request afin de pouvoir rcuprer vos donnes. - Request.Form[id_ou_nom_devotre_objet] pour la mthode post - Request.QueryString[id_ou_nom_devotre_objet] pour la mthode get ou alors la rcupration de paramtres dans une chane de requtes (une URL).

1.6.6. Lobjet Response


Avec lobjet Response, il sera possible de constituer la rponse que le serveur renverra au client (ou plutt son navigateur). Tout comme quelques objets que nous avons vu prcdemment, il possde des proprits et des mthodes qui permettent daccder dautres objets (de rponse) comme les objets Cache et Cookies entre autre. Un peu plus haut, dans lexemple sur les cookies, nous avions ajout le cookie la collection de cookies. Cet ajout est fait dans la rponse qui sera renvoye par le serveur.

Essentiel ASP.NET 2.0 Applications Web

13 / 24

2. Contrles serveur
2.1. Gnralits
Un contrle serveur est un objet permettant de gnrer des fragments de code HTML. Un tel objet est une instance dune classe drivant de la classe de base System.Web.UI.Control. Lavantage principal des contrles serveur est leur capacit lever des vnements. Par exemple, le contrle serveur asp:TextBox, qui correspond une zone de saisie de texte, possde entre autres lvnement TextChanged qui sera lev chaque fois que le texte quil contient aura t modifi. Nous verrons un peu plus loin comment, et quand, un tel vnement est lev. Il est important de savoir que chaque contrle serveur est potentiellement un conteneur de contrle. Cest pour cela quun contrle serveur peut tre compos dun ou plusieurs autres. La proprit Controls de la classe Control vous permet dobtenir des diffrents contrles contenus dans un autre. On peut voir une page aspx comme une arborescence de contrles, dont le point dentre est accessible partir de la collection Controls de lobjet Page (cet objet existe dans toute page aspx). Enfin, il faut savoir quun contrle serveur est toujours sous la forme <asp:NomDuControle />, et quil possde toujours lattribut runat="server". Cet attribut dfinit le fait que llment doit tre trait du ct du serveur et ne doit pas tre renvoy tel quel au client.

2.2. Prsentation de quelques contrles


Il serait inutile de prsenter une liste exhaustive de tous les contrles serveurs mais nous allons tout de mme numrer les plus importants. Button

Le contrle Button permet de valider un formulaire (et donc une page aspx). Il est utilis pour envoyer au serveur les diffrentes actions effectues par lutilisateur dans le but de raliser un traitement en rapport. TextBox

Comme son nom lindique, ce contrle permet la saisie de texte par lutilisateur, cest un des contrles serveurs les plus utiliss. CheckBox / RadioButton

Ces contrles serveur permettent lutilisateur de choisir parmi une liste dlments. Les choix sont soit exclusifs dans le cas des RadioButton, soit indpendants dans le cas des CheckBox. HyperLink / ImageButton

La diffrence entre un lien HTML standard et le contrle serveur HyperLink est que ce dernier permet de gnrer un retour vers le serveur (cf. 2.4). LImageButton, quant lui, est un complment du bouton standard.

Essentiel ASP.NET 2.0 Applications Web DropDownList

14 / 24

Ce contrle permet dafficher des lments sous forme de liste droulante. Il possde une proprit Items, qui est une collection dobjets ListItem. Literal

Tous les contrles prcdents gnrent forcment un rendu HTML. Le contrle Literal est un contrle un peu particulier, dont le seul rle est de se substituer au texte contenu dans sa proprit Text. Contrles volus

Vous pouvez le constater dans la barre doutils de Visual Studio, il y a de nombreux autres contrles serveur plus volus, tels que le contrle Calendar, permettant dafficher un calendrier, et dautre en rapport avec la gestion des utilisateurs, ou encore de laccs aux donnes. Mis part le contrle calendrier, ces diffrents contrles seront traits dans un autre module du cours dASP.NET 2.0.

2.3. Interaction Client/Server


Avant ASP.NET, c'est--dire avec ASP, la sauvegarde des diffrents tats des contrles dune page entre deux requtes tait plutt difficile mettre en uvre. Il fallait analyser chaque requte ltat de chaque contrle, puis de le restituer avant denvoyer la rponse au client. Depuis ASP.NET 1.1, ceci est fait automatiquement ! Comment est-ce possible ? Grce au principe de ViewState et galement de ControlState depuis ASP.NET 2.0. Le viewstate est un contrle HTML ( ne pas confondre avec contrle serveur ), invisible (hidden) qui contient une chane de caractres qui stock ltat de tous les contrles de la page.

Exemple de viewstate :
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTkwNjc4NTIwMWRkDQJ6u1ACZNW/dcngEmrRuFlabSw=" />

Llment ViewState est automatiquement gnr par ASP.NET. Il doit imprativement porter le nom __VIEWSTATE . Vous pouvez activer ou dsactiver la gestion de ltat dun contrle par le viewstate en modifiant sa proprit EnableViewState. Le viewstate contenant les tats de tous les contrles serveur, celui-ci risque de devenir norme, surtout lorsque lon souhaite y stocker les valeurs dune table (par exemple via un GridView, cf accs aux donnes en asp.net). Ceci pouvait tre lorigine de problmes de performance en ASP.NET 1.1. Cet inconvnient est largement diminu actuellement grce lintroduction depuis la version 2.0 de la notion de ControlState. Les ControlStates ont le mme but que le ViewState, la seule diffrence tant quils sauvegardent ltat dun contrle donn. A noter que lon ne peut pas directement voir les ControlState des contrles dune page aspx, sachant quils sont stocks comme une sous section du viewstate.

Essentiel ASP.NET 2.0 Applications Web

15 / 24

2.4. Le principe de PostBack


Tout le systme de programmation vnementielle dASP.NET est possible grce un principe qui permet la communication des vnements du client vers le serveur. Ce mcanisme est appel postback. Le postback est lenvoi dune requte POST vers le serveur suite la leve dun vnement dont lorigine est une action de lutilisateur. Ce type dvnement ncessite en gnral un traitement immdiat, cest pourquoi un appel au serveur est ncessaire. Lexemple le plus parlant dun tel vnement est la validation dun formulaire via un bouton. Il existe galement des vnements non-postback. Il sagit dactions de lutilisateur ne ncessitant pas un traitement immdiat, mais qui devra tre pris en compte lors du prochain postback. Un bon exemple dvnement non-postback est lvnement CheckedChanged dun CheckBox, qui est lev lorsque lutilisateur coche la case du contrle. Ceci dit, il peut tre intressant de contraindre certains contrles utilisateurs ntant pas PostBack par dfaut gnrer un postback. Il suffit pour cela de placer true leur proprit AutoPostBack. Notez que lobjet Page de chaque page aspx possde une proprit IsPostBack qui permet de vrifier si la requte courante est issue dun PostBack ou dun appel volontaire de lutilisateur (rafraichissement de la page, ou premier affichage). Cela peut tre trs utile, surtout dans le cas de traitements qui ne doivent sexcuter quune seule fois. Voici un cas de figure plutt explicite, dmontrant lutilit de la proprit IsPostBack. Nous avons un contrle DropDownList qui est charg lors de lvnement Load de la page.
protected void Page_Load(object sender, EventArgs e) { this.DropDownList1.Items.AddRange( new ListItem[] { new ListItem("Alsace"), new ListItem("Paris"), new ListItem("Valencienne") }); }

Ce code est parfaitement fonctionnel et chargera bien la liste droulante chaque appel de la page. Le problme survient lors dun retour postback vers le serveur. Sachant le viewstate conserve ltat des contrles, le contenu de la liste est conserv, et la mthode AddRange va ajouter une fois de plus le mme contenu, ce qui nest pas du tout leffet dsir.

La solution ce problme est de tester si la requte nest pas un postback et de ne faire lajout que dans le cas contraire. Voici la mthode Page_Load modifie :
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) {

Essentiel ASP.NET 2.0 Applications Web


this.DropDownList1.Items.AddRange( new ListItem[] { new ListItem("Alsace"), new ListItem("Paris"), new ListItem("Valencienne") }); } }

16 / 24

Un dernier aspect du principe de postback est apport par la version 2.0 dASP.NET. Il sagit du CrossPagePostBack. Derrire ce nom difficilement prononable se cache la rsolution dun problme simple : sachant quune page Page2.aspx ne contient pas les contrles dune page Page1.aspx, comment faire pour lui transmettre facilement les tats des contrles de cette dernire ? Il suffit de modifier la proprit PostBackUrl de Page1.aspx en indiquant le chemin de Page2.aspx. Pour illustrer cette fonctionnalit, voici le code dune Page1.aspx, contenant une zone de saisie de texte, et un bouton de validation :
<asp:TextBox ID="TxtToFeed" runat="server"></asp:TextBox> <asp:Button ID="BtClickMe" runat="server" PostBackUrl="~/Page2.aspx" Text="Button" />

Notez bien la proprit PostBackUrl du contrle Button. La page Page2.aspx elle ne contient quun label, qui affichera le texte contenu dans le TextBox de Page1.aspx, et ce uniquement lors dun CrossPagePostBack.
protected void Page_Load(object sender, EventArgs e) { if (PreviousPage != null && PreviousPage.IsCrossPagePostBack) { this.LblDisplay.Text = ((TextBox)PreviousPage.FindControl("TxtToFeed")).Text; } }

Pour accder aux diffrents lments de la page ayant initi le CrossPagePostBack, il suffit de vrifier si la proprit PreviousPage existe (non null), et si la proprit IsCrossPagePostBack de cet objet est true. On peut alors accder notamment aux diffrents contrles de cette page et leurs proprits, grce la mthode FindControl.

2.5. Validation de contrles


Trs souvent lors du dveloppement dapplications web, il est impratif de vrifier la saisie des utilisateurs. Cela va du fait quune zone de texte est bien renseigne au fait quune chane de caractres ait un format voulu. ASP.NET simplifie grandement cela grce aux contrles de validation. Chaque contrle de validation possde au moins une proprit permettant de renseigner le contrle serveur valider (ControlToValidate). La validation dun contrle se fait en 2 tapes, une validation sur le client (en javascript) et une autre sur le serveur. Vous pouvez viter le contrle ct client grce la proprit EnabledClientScript du contrle de validation concern.

Essentiel ASP.NET 2.0 Applications Web

17 / 24

La validation des contrles se fait lorsquASP.NET appelle la mthode Page.Validate(). Attention, cette mthode est appel par ASP.NET aprs lexcution de la mthode Page_Load(), vous ne pourrez tester la valider dune page (grce la proprit Page.IsValid) dans cette mthode QUE si vous appelez Page.Validate() vous-mme au pralable. Il existe 5 contrles de validation : - Le contrle RequiredFiledValidator, doit tre associ un contrle qui doit obligatoirement tre renseign. - Le contrle CompareValidator est utilis conjointement deux zones de saisie de texte qui doivent tre identique. Par exemple, lors de la saisie dun mot de passe et sa validation dans une deuxime zone de texte. Notez que ce contrle possde en plus de la proprit ControlToValidate, une proprit ControlToComplete. - Le contrle RangeValidator quant lui, est utilis pour vrifier si une valeur numrique est comprise entre deux bornes que vous spcifiez au contrle de validation. - Le contrle RegularExpressionValidator permet de comparer le texte dune zone de texte un motif (pattern). Il sert par exemple vrifier la validit dune adresse email. Sachez que vous ntes pas oblig de crer vous-mme les motifs de comparaison, il existe un certain nombre de motifs prdfinis et qui couvre une grande partie de lutilisation courante de ce contrle de validation. Le pattern doit tre plac dans lattribut ValidationExpression. - Enfin, le contrle CustomValidator va vous permettre de crer vos propres contrles de validation. Voici un exemple de formulaire dinscription illustrant les contrles de validations

Voici le code aspx en rapport avec ce rsultat :


Nom <asp:TextBox ID="TxtNom" runat="server" /> <asp:RequiredFieldValidator ID="MyRequiredFieldValidator" runat="server" ErrorMessage="Vous devez saisir un nom." ControlToValidate="TxtNom"/><br /> Password <asp:TextBox ID="TxtPass" runat="server" TextMode="Password" Width="147px"></asp:TextBox><br /> Validation password <asp:TextBox ID="TxtPassValid" runat="server" TextMode="Password"/> <asp:CompareValidator ID="MyCompareValidator" runat="server" ErrorMessage="Les deux mots de passe doivent tre identiques" ControlToCompare="TxtPassValid" ControlToValidate="TxtPass" /><br /> Email <asp:TextBox ID="TxtEmail" runat="server" /> <asp:RegularExpressionValidator ID="MyRegularExpressionValidator"

Essentiel ASP.NET 2.0 Applications Web


runat="server" ErrorMessage="L'adresse Mail n'est pas valide." ControlToValidate="TxtEmail" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([.]\w+)*" /><br /> Age <asp:TextBox ID="TxtAge" runat="server" /> <asp:RangeValidator ID="MyRangeValidator" runat="server" ErrorMessage="Votre age n'est pas valide." ControlToValidate="TxtAge" MaximumValue="77" MinimumValue="7" Type="Integer" /> <asp:Button ID="MyButton" runat="server" OnClick="MyButton_Click" Text="S'inscrire" />

18 / 24

Vous lavez certainement compris, la proprit ErrorMessage permet de dfinir le message derreur qui sera affich si une validation choue. Voyons maintenant un exemple dutilisation dun CustomValidator. Pour cela nous allons crer un validateur qui permettra de vrifier si un champ est un nombre pair.

Pour cela il nous faut crire une fonction de vrification ct client, et une mthode de vrification ct serveur. La fonction ct client sera crite en Javascript :
<script type="text/javascript"> function EstPair_Clientvalidation(source, args) { if( args.Value % 2 == 0 ) { args.IsValid = true; } else { args.IsValid = false; } } </script>

Elle doit obligatoirement respecter cette signature (deux variable en paramtres). Le paramtre args, permet de connaitre la valeur valider, grce la proprit Value, et permet de dfinir si elle est valide ou non, grce la proprit boolenne IsValid. La mthode ct serveur possde galement une signature particulire, elle prend en paramtre la source, et un ServerValidateEventArgs :
<script runat="server"> void EstPair_ServerValidation(object source, ServerValidateEventArgs e) { e.IsValid = false; int temp; if (Int32.TryParse(e.Value, out temp))

Essentiel ASP.NET 2.0 Applications Web


{ if (temp % 2 == 0) { e.IsValid = true; } } } </script>

19 / 24

Vous remarquerez que le principe est le mme ct client et ct serveur. Une fois ces deux code de validation crits, il ne reste plus qua ajouter un CustomValidator, et lui prciser les mthodes de validation quil doit utiliser, grce sa proprit ClientValidationFunction, pour la fonction javascript, et lvnement OnServerValidate pour la mthode ct serveur.
<asp:TextBox ID="TxtBox" runat="server"/> <asp:CustomValidator ID="CustomValidator1" runat="server" ControlToValidate="TxtBox" ErrorMessage="Veuillez entrer un nombre pair." ClientValidationFunction='EstPair_Clientvalidation' OnServerValidate="EstPair_ServerValidation" />

Un problme existant en ASP.NET 1.1 survenait lorsquune page possdait plusieurs de contrles diffrents qui devaient tre valids sparment. Prenons pour exemple une page possdant la fois une zone de saisie de texte pour effectuer une recherche rapide sur le site et une autre permettant de sinscrire la newsletter. Il est facile dimaginer quon ne souhaite pas valider ladresse email saisie pour linscription la newsletter lorsque lutilisateur souhaite effectuer une recherche. La version 2.0 apporte donc une notion nouvelle : les groupes de validation. Il est donc possible de regrouper les contrles par groupes de validation, de manire les contrler sparment. Pour cela il suffit de renseigner la proprit ValidationGroup des contrles de validations dun groupe et du bouton associ avec la mme valeur. La majorit des sites web effectuant la validation de donnes saisies regroupe les messages derreurs ventuels dans un endroit particulier, de faon rendre plus facile la correction de celle-ci par lutilisateur. Ceci peut tre fait trs facilement grce la classe ValidationSummary. Le simple fait de placer un contrle ValidationSummary sur une page contenant des contrles de validation centralisera leurs messages lendroit o il se trouve.

Essentiel ASP.NET 2.0 Applications Web

20 / 24

3. Framework de page
3.1. Les MasterPages
Imaginez un site web standard, compos graphiquement dun menu gauche, un entte, un pied de page et une zone centrale affichant le contenu des pages. Ceci ressemblerait schmatiquement cela :

Comment faire en sorte de ne pas avoir mettre jour toutes les pages du site web chaque fois que le menu change, ou que le logo contenu dans lentte du site est modifi ? Grce une nouveaut apporte par la version 2.0 dASP.NET : les MasterPages (pages matres). Une MasterPages est une page ASP.NET particulire, dextension .master, permettant de dfinir un squelette de page, qui pourra tre rutilis dans nimporte quelle autre page du site web. On peut voir cela comme une sorte d hritage graphique . Cest donc dans une MasterPage que nous dfinirons les lments redondants dun groupe de pages. On dfinit les zones personnalisables dans chaque page associe la MasterPage grce des contrles serveur ContentPlaceHolder. Voici la MasterPage correspondant la capture dcran prsent plus haut :

Essentiel ASP.NET 2.0 Applications Web

21 / 24

Pour associer une page aspx une MasterPage il suffit simplement de la dfinir grce lattribut MasterPageFile, puis de dfinir le contenu des diffrents ContentPlaceHolder de la masterPage pour cette page grce des contrles Content.
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Home.aspx.cs" Inherits="Home" Title="Untitled Page" %> <asp:Content ID="Content1" ContentPlaceHolderID="CPHContent" Runat="Server"> </asp:Content>

Voil laffichage de cette page dans Visual Studio en mode design :

Essentiel ASP.NET 2.0 Applications Web

22 / 24

On remarque bien que la seule zone ditable (non grise) est le contrle Content. Pour pouvoir utiliser une masterpage dans un page aspx, il faut choisir cette dernire en cochant "Select a master page" au moment de la cration de la page. Notez quil est possible dencapsuler les MasterPages. Lors de la mise en place de sites web importants, il peut tre lourd de devoir renseigner la page matre dans la proprit MasterPageFile de la directive de chaque page de lapplication. Il est possible de configurer une page matre par dfaut pour toutes les pages aspx dun site web dans le fichier de configuration de celui-ci.
<system.web> <pages masterPageFile="~/MasterPage.master" />

A partir de l, chaque page ne possdant pas dattribut MasterPageFile et dfinissant les contrles Content ncessaire lutilisation de la MasterPage dfinie dans le fichier de configuration sera associe cette MasterPage. Enfin, notez quil est possible daccder aux lments publics dune MasterPage partir dune page qui lui est associe grce lobjet Master accessible dans cette dernire. Supposons quil existe une MasterPage contenant un label :
<asp:Label ID="LblAccessible" runat="server" Text="Label" />

Dans une page utilisant cette MasterPage, voici le code permettant de modifier le texte du Label :
((Label)Master.FindControl("LblAccessible")).Text = "Some text";

3.2. Style, Skin, Thmes


Les styles tels quon les connait en HTML sont tout fait utilisables dans des application ASP.NET. La classe de base commune tous les contrles serveur (WebControl) prsente la proprit CssClass qui permet de dfinir le nom dun style appliquer pour ce contrle. Cette classe comprend galement plusieurs attributs fortement typs tels que par exemple : BackColor. Supposons que notre application web contient la feuille de style suivante :
.TextBoxes { border: 5px; }

Voici le code ncessaire lutilisation de la classe CSS TextBoxes sur un contrle TextBox :
<asp:TextBox ID="MyTextBox" runat="server" CssClass="TextBoxes" />

Les thmes sont un ensemble de styles qui peuvent tre appliqu un ensemble de pages, statiquement, ou dynamiquement. Un thme est matrialis par un rpertoire : le nom du rpertoire est

Essentiel ASP.NET 2.0 Applications Web

23 / 24

le nom du thme. Un tel rpertoire doit tre stock dans le rpertoire /App_Theme de lapplication web. Pour configurer un thme pour un ensemble de pages, il est possible, soit de le configurer pour lensemble de lapplication via le fichier de configuration via llment <pages theme="Theme" />, soit par la directive Page dune page aspx via lattribut Theme. Un Thme contient un ou plusieurs fichier skin et zro ou plusieurs fichiers CSS. Les skins dfinissent lapparence de contrles web, un fichier dextension .skin dfinissant celle dun type de contrle web. La dfinition dun fichier skin ressemble la dfinition dun contrle mise part le fait que seules certaines proprits peuvent tre renseignes. Voici un exemple de fichier skin :
<asp:TextBox height="200px" runat="server" /> <asp:Label Font-Bold="true" />

Un theme contenant ce fichier rendra la police des Label en gras, et la hauteur des TextBox 200 pixels.

Essentiel ASP.NET 2.0 Applications Web

24 / 24

4. Fichiers de configuration
Un grand nombre de paramtres dune application web peuvent tre centraliss dans des fichiers de configuration. Ce sont des fichiers XML dont llment principal est le nud <system.web/>. Il est galement possible de dfinir ses propres paramtres dans un fichier de configuration <appSettings/>. Voici un exemple de paramtre propre ajout dans le fichier de configuration :
<appSettings> <add key="CaptainAge" value="42" /> </appSettings>

La variable CaptainAge sera accessible partir de nimporte quel page de lapplication grce la collection statique AppSettings de la classe ConfigurationManager :
ConfigurationManager.AppSettings["CaptainAge"]

4.1. Organisation des fichiers


Une application web peut tre configure grce plusieurs fichiers de configuration, qui peuvent tre situs quatre endroits diffrents sur le serveur : - Le fichier Machine.Config, qui se trouve dans le rpertoire dinstallation du Framework .Net - Le fichier Web.Config, qui se trouve dans le rpertoire racine de tous les sites hbergs par le serveur - Le fichier Web.Config situ dans le rpertoire racine dune application - Les fichiers Web.Config qui se trouve dans nimporte quel sous rpertoire dune application web Si deux paramtres se contredisent dans deux fichiers diffrents, il faut savoir que cest le fichier le plus proche dune page qui prime. Par exemple, si un lment de configuration du fichier Web.Config situ dans le rpertoire racine dune application est en contradiction avec celui situ dans le fichier Machine.Config, cest celui situ dans le fichier Web.Config qui sera pris en compte.

4.2. Prise en compte des mises jour


ASP.NET utilise le systme shadow copy qui consiste ne pas utiliser directement en mmoire les fichiers binaires dune application web, mais des copies de ceux-ci. Cela permet de pouvoir mettre jour ces fichiers sans devoir arrter lapplication. Ce principe permet de prendre en compte les modifications des lments dun fichier de configuration sans avoir redmarrer le serveur web.

Вам также может понравиться