Академический Документы
Профессиональный Документы
Культура Документы
0 Applications Web
Essentiel
Objectifs :
Connatre le fonctionnement du langage ASP.NET Apprendre dvelopper des applications Web Dvelopper des services We
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
3 / 24
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.
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).
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
MaClasse.dll
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>
6 / 24
<!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>
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 } }
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.
8 / 24
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.
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.
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.
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.
//traitement
} }
Dans lexemple, nous utilisons les objets Request et Browser de lobjet Application afin de dterminer si le navigateur est Internet Explorer.
11 / 24
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"
12 / 24
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.
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.
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.
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.
15 / 24
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) {
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.
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
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))
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.
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 :
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>
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";
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
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.
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"]