Vous êtes sur la page 1sur 105

ROYAUME DU MAROC

Office de la Formation Professionnelle et de la Promotion du Travail

Dvelopper des composants serveur

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION SECTEUR NTIC

ROYAUME DU MAROC

Office de la Formation Professionnelle et de la Promotion du Travail

DIRECTION RECHERCHE ET INGENIERIE DE FORMATION SECTEUR NTIC

Dvelopper des composants serveur

Sommaire
1. Introduction ASP.NET 2.0........................................................................4 1.1. Principes..........................................................................................4 1.2. Environnement de dveloppement......................................................5 1.2.1. Un serveur Web..........................................................................5 1.2.2. Framework 2.0............................................................................5 1.2.3. Un EDI, c'est ncessaire ?............................................................5 1.2.3.1. Etape 1...................................................................................5 1.2.3.2. Etape 2...................................................................................7 1.2.3.3. Etape 3...................................................................................7 1.2.4. Visual Studio ou Visual Web Developper.........................................8 1.3. La gestion dEtat...............................................................................9 1.3.1. Premire page............................................................................9 1.3.2. Des vnements particuliers.......................................................13 1.3.2.1. Application.............................................................................13 1.3.2.2. Session.................................................................................13 1.3.2.3. PostBack...............................................................................14 1.3.3. Les Server Controls....................................................................18 1.3.4. ViewState.................................................................................20 1.3.5. Cookies....................................................................................22 1.3.6. Variable de session....................................................................39 1.3.7. Variable d'application.................................................................39 1.3.8. L'objet Cache............................................................................40 1.3.9. Caching (ou cache HTML)...........................................................40 1.3.10. QueryString............................................................................41 1.4. Contrles utilisateur ASP.NET...........................................................41 1.4.1. Structure de contrle utilisateur...................................................42 1.4.2. Ajout d'un contrle utilisateur une page.....................................44 Pour insrer un contrle utilisateur dans une page Web Forms.................44 1.5. Validation des donnes....................................................................44 1.5.1. RequiredFieldValidator................................................................45 1.5.2. RangeValidator..........................................................................45 1.5.3. CompareValidator......................................................................46 1.5.4. RegularExpressionValidator.........................................................46 1.5.5. CustomValidator........................................................................47 1.5.6. ValidationSummary....................................................................48 2. Laccs aux donnes avec ASP.NET.........................................................49 2.1. Introduction...................................................................................49 2.2. Contrles de source de donnes........................................................49 2.3. Contrles lis aux donnes...............................................................50 Contrles de liste ..............................................................................51 3. Master Page.........................................................................................52 3.1. Introduction aux MasterPages...........................................................52 3.2. Cration d'une MasterPage...............................................................53 3.3. Mise en place d'une MasterPage........................................................55 3.4. Conclusion.....................................................................................56 4. Thmes ( apparences(Skins) et feuilles Css).............................................57 4.1. Introduction aux thmes..................................................................57 4.2. Cration d'un thme........................................................................57

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 1 - 105

Dvelopper des composants serveur 4.3. Les fichiers Skins............................................................................58 4.4. Les fichiers CSS..............................................................................60 4.5. Application d'un thme....................................................................63 4.6. Appliquer un thme global................................................................64 4.7. Dsactiver un thme.......................................................................65 5. Profiles...............................................................................................65 5.1. Introduction aux Profiles..................................................................65 5.2. Implmentation des Profiles.............................................................66 5.3. Description des tables et procdures..................................................67 5.4. Mise en place des Profiles.................................................................68 5.5. Ajouter / Modifier les proprits........................................................70 5.6. Les groupes de proprits................................................................72 5.7. Conclusion.....................................................................................73 6. Scurit en ASP.NET 2.0........................................................................73 6.1. Introduction...................................................................................73 6.2. Le fichier de configuration: Web.config...............................................74 6.3. Utilisation des Memberships et rles..................................................77 6.3.1. Installation de la base................................................................77 6.3.2. Memberships............................................................................78 6.3.3. Rles.......................................................................................80 6.4. Les contrles de login......................................................................81 6.4.1. Login.......................................................................................81 6.4.2. LoginView.................................................................................81 6.4.3. PasswordRecovery ....................................................................82 6.4.4. LoginStatus..............................................................................82 6.4.5. LoginName...............................................................................83 6.4.6. CreateUserWizard......................................................................83 6.4.7. ChangePassword.......................................................................84 6.5. Les diffrents fournisseurs d'authentification.......................................84 6.5.1. Forms......................................................................................85 6.5.2. Passport...................................................................................85 6.5.3. Windows..................................................................................85 6.5.4. None........................................................................................85 6.6. Appliquer des autorisations..............................................................85 6.6.1. Les balises................................................................................85 6.6.2. Exemples d'autorisations............................................................86 6.7. WSAT - Web Site Administration Tool.................................................87 6.7.1. Security...................................................................................87 6.7.2. Application................................................................................88 6.7.3. Provider...................................................................................89 7. Web Parts............................................................................................90 7.1. Introduction aux WebParts...............................................................90 7.2. Les diffrentes zones de WebParts.....................................................91 7.3. Cration des WebParts.....................................................................92 7.4. Formatter des WebParts...................................................................94 7.5. Changement de mode......................................................................95 7.6. CatalogZone...................................................................................98 7.7. EditorZone...................................................................................100 7.8. Conclusion....................................................................................102 8. Conclusion.........................................................................................103

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 2 - 105

Dvelopper des composants serveur

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 3 - 105

Dvelopper des composants serveur

1.Introduction ASP.NET 2.0


1.1. Principes
L'interaction Client / Serveur est la base principale des applications web. Il est donc trs important de bien comprendre le principe de fonctionnement d'ASP.NET dans l'environnement DotNet avec le serveur IIS (Internet Information Services). Un petit schma trs simplifi vous aidera peut tre y voir plus clair :

Voici donc ce qui se passe lorsque vous, utilisateur dsirant naviguer sur une page web, gnrez comme action si l'application que vous dsirez atteindre est dveloppe en ASP.NET 2.0 :

1 = vous tapez une url dans votre navigateur et donc, envoyez une requte pour une page aspx d'un client web vers le serveur IIS 2 = la requte est analyse et le traitement est transfr au runtime, un processus est cr pour excuter l'application --> S'il s'agit de la premire excution du code de cette page, le compilateur JIT (Just In Time) compile le code en binaire natif et le stoque en mmoire. --> Si ce n'est pas la premire excution, le code binaire est charg depuis le cache. 3 = ce code binaire est excut puis renvoy vers le serveur IIS 4 = IIS renvoie la rponse sous la forme de code HTML strict vers l'utilisateur. Ce code HTML est affich dans votre navigateur.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 4 - 105

Dvelopper des composants serveur

1.2.

Environnement de dveloppement
Un serveur Web

1.2.1.

Puisque nous allons crer du code utilisant une liaison Client / Serveur, il est bien entendu ncessaire d'avoir un serveur disposition dans notre cas, Nous allons utiliser le serveur IIS. IIS est disponible avec windows XP professionnel et windows 2003 server Sous XP Home, il n'est pas ais d'installer IIS, bien que cela soit possible.

1.2.2.

Framework 2.0

Si framework .NET n'a pas t install aprs le serveur IIS, vous aurez des problmes d'excution des pages aspx. Pour remdier cet inconvnient postriori, vous pouvez excuter une commande du type : C:\Windows\Microsoft.Net\Framework\v2.0.xx\aspnet_regiis.exe -i ou xx est la version du Framework 2.0 prsente sur votre ordinateur.

1.2.3.

Un EDI, c'est ncessaire ?

Nous avons tous l'habitude de travailler dans un environnement de dveloppement intgr bien que cela ne soit pas toujours ncessaire mais plutt bien pratique. Il en est de mme avec le dveloppement ASP.NET. Vous pouvez, comme pour des applications Winforms, crire du code dans un diteur de texte. Voici, en quelques tapes, la ralisation et l'excution d'une page aspx cre avec le bloc-note :

1.2.3.1.

Etape 1

Crez un site virtuel sur votre IIS et nommez-le, par exemple, "PremierePage". Si vous n'avez jamais ralis cette opration, voici comment procder :
a. Allez dans le panneau de contrle de Services Internet (IIS) :

Outils d'administration dans le panneau de configuration puis choisissez Internet Informations Services b. Droulez les options jusqu' trouver Site Web par dfaut et faites un clic droit c. Choisissez Nouveau -> Rpertoire virtuel ... d. Crez votre rpertoire Voici en images et sur XP Pro en anglais les tapes dcrites ci-dessus :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 5 - 105

Dvelopper des composants serveur

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 6 - 105

Dvelopper des composants serveur

Terminer votre cration en laissant les paramtres par dfaut.

1.2.3.2.

Etape 2

Ouvrez le bloc-notes et crez un fichier avec ce code :


<%@ Page Language="VB" %> <html> <body> <h1>Bonjour</h1> <br /> <h2>Nous sommes le <%= DateTime.Now.ToString() %>.</h2> </body> </html>

Sauvegardez-le la racine du site que vous avez cr en le nommant par exemple "bonjour.aspx".

1.2.3.3.

Etape 3

Excutez cette page aspx dans votre navigateur en tapant son adresse dans la barre de navigation : http://localhost/PremierePage/bonjour.aspx et vous devez avoir une page web comme suit :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 7 - 105

Dvelopper des composants serveur

Vous venez donc de crer votre premire page ASP.NET s'excutant sur un serveur IIS sans avoir ouvert Visual Studio comme support de programmation.

1.2.4.

Visual Studio ou Visual Web Developper

Il est bien vident qu'un EDI digne de ce nom vous offre une multitude d'avantages comme la compltion du code, l'initialisation automatique de vos pages, les contrles utilisateurs, ... malgr que, dans quelques cas, il est parfois plus avantageux de coder directement son contrle dans la page HTML plutt que de passer par le Designer de l'EDI. Que vous utilisiez Visual Studio ou Visual Web Developper (EDI gratuit et tlchargeable sur le site de Microsoft France), le dmarrage de votre application sera presque le mme. La seule diffrence vient du fait que Visual Studio tant un EDI qui regroupe plusieurs possibilits de dveloppement, vous devrez spcifier que vous dsirez travailler avec un nouveau projet web avant d'arriver sur cette page de configuration :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 8 - 105

Dvelopper des composants serveur

Il est primordial de bien configurer les informations dans Emplacement (Location) et Langage (Language) ainsi que l'adresse du site que vous dsirez dvelopper sur votre serveur IIS local (localhost). Visual Web Developper comporte un serveur "intgr". Si vous ne comptez l'utiliser qu'en dveloppement, ce serveur Visual Studio est largement suffisant.

1.3.

La gestion dEtat
Premire page

1.3.1.

Enfin ! Un petit exemple en utilisant Visual Studio ou Visual Web Dvelopper pour se familiariser avec l'environnement ASP.NET. Si vous tes familier avec le "designer" des applications Visual Studio ou Visual Express Edition, ceci vous paratra trs simple mais on se permet tout de mme de dtailler un peu l'interface pour ceux qui abordent ce thme pour la premire fois.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 9 - 105

Dvelopper des composants serveur

Reprenons notre EDI et, aprs avoir bien configur les donnes au niveau du serveur et du nom de l'application, l'interface doit maintenant ressembler ceci :

Vous pouvez remarquer que l'interface des applications ASP.NET diffre des applications Winforms mais nous y retrouvons quand mme pas mal de points communs, notamment :

l'explorateur de solution contenant notre projet "WebApp", sa localisation "http://localhost/WebApp" et la page par dfaut "Default.aspx", que nous pouvons bien videmment renommer. les proprits des contrles et pages grce auxquelles nous allons pouvoir dfinir des comportements graphiques ou autres. la page de code o une partie de codage est gnre automatiquement par l'environnement de dveloppement. deux boutons "design" et "source" nous permettant de passer aisment d'un mode l'autre dans notre page aspx. Remarquez aussi que, si vous dplacez votre curseur dans la partie code, droite du bouton "source", vous apercevez l'endroit exact o se situe le curseur dans l'arborescence des balises HTML. la boite outils, ancre ou non, contenant les contrles utilisables pour votre application web :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 10 - 105

Dvelopper des composants serveur

Passons maintenant en mode "design". Faites glisser sur la page les contrles suivant et changez leurs proprits en suivant le tableau ciaprs : Contrle
Un "label" : Label1 Un "textbox" droite de Label1 : TextBox1 Un "button" sous Label1 : Button1 Un "label" sous le bouton : Label2

Proprit
Text Text Text

Contenu
"Nom :" "Cliquez" "Bonjour"

BorderWidth 2

Remarque : dans la proprit BorderWidth, par dfaut, l'unit de mesure est en "px" (pixel). Cela correspond bien aux normes HTML. Votre page doit ressembler ceci :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 11 - 105

Dvelopper des composants serveur Si vous retournez en mode "source", vous constatez que le code HTML s'est enrichi automatiquement des contrles que vous avez intgrs votre page ainsi que des proprits modifies via la page de proprits. Rien ne vous empche, au fil de l'exprience acquise dans le dveloppement ASP.NET, de taper immdiatement le code de vos contrles dans la page HTML, vous verrez que le "design" se met aussi jour de la mme manire. L'avantage de coder directement dans l'HTML se trouve dans le libre choix que vous avez du type de contrle plac. Par exemple, vous voyez dans notre application que le TextBox1 est considr comme un "asp:textbox" ce qui, niveau excution du code prend plus de place et de temps qu'un simple "asp:inputbox" alors que le rsultat, ici, est exactement le mme. Pour les utilisateurs avertis ayant dj ralis des sites web en HTML, il peut aussi tre plus ais de coder directement dans la page source. A ce point, nous avons des contrles placs sur une page aspx, mais encore aucune action n'est dfinie. Vous avez beau taper un nom dans "TextBox1" et cliquer sur le "Button1", rien ne se passe. En effet, il faut associer un vnement au bouton "Cliquez". Pour ce faire, doublecliquez sur le bouton en mode design et l'environnement de dveloppement va crer une mthode associe l'vnement "Click" du bouton :

Remarquez qu'une nouvelle page est apparue "Default.aspx.vb" qui contient le code associ aux mthodes et vnements. Dans votre vnement "Button1_Click", tapez cette ligne : label2.text=label2.text & " " & textbox1.text Vous verrez en cours de frappe que l'aide la compltion existe aussi, exactement comme dans les applications winforms. Maintenant, vous pouvez excuter votre page aspx (F5). Lors d'une premire excution vous allez certainement obtenir ce message :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 12 - 105

Dvelopper des composants serveur

Par dfaut, le dbogage n'est pas activ au niveau des applications web. On vous conseille fortement de l'activer en rpondant OK avec la premire option coche. Ensuite, testez en tapant un nom et en cliquant sur votre bouton.

1.3.2.

Des vnements particuliers

ASP.NET possde des vnements mais, certains sont assez particuliers et trs importants pour le droulement et le contrle de ce genre d'application.

1.3.2.1.
Evnement
Application_Start

Application
Description
Excut lors du premier appel une page du site depuis le dmarrage de IIS

Appel lorsque l'application se termine, cela ne Application_End signifie pas que IIS s'arrte mais est d'office appel si, pour une raison quelconque IIS est arrt

1.3.2.2.

Session
Description
appel lors de chaque nouvelle session d'un navigateur client fin de session : lors d'un timeout ou lors d'une destruction explicite (Session.Abandon()) via un lien "Log Out" par exemple

Evnement
Session_Start

Session_End

Il faut aussi savoir qu'une session peut stocker ses donnes en mode "InProc" (dans le process en mmoire) ou en mode "Sql..." (dans une BD SqlServer) via la base de donnes "AspNetState".

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 13 - 105

Dvelopper des composants serveur Application et Session sont des notions trs importantes en ASP.NET. Elles jouent en effet un rle trs actif au niveau de la vie d'un site et, notamment, au niveau de la prennit des donnes vhicules dans le site lui-mme. Un petit schma pour mieux visualiser la diffrence entre "Application" et "Session" :

Soit trois utilisateurs U1, U2 et U3 qui envoient une requte vers le serveur IIS. Il y aura un seul objet "Application" commun tous les utilisateurs du site mais trois objets "Session" correspondant chacun un utilisateur prcis. Si U2 quitte son poste de travail sans couper son navigateur : s'il n'y a pas de timeout, les autres utilisateurs peuvent accder S2 S'il y a timeout et que U2 revient visiter le site, une nouvelle session S4 sera cre Par contre, si U2 coupe son navigateur, S2, persiste jusqu' un ventuel timeout ou jusqu' la fin de l'application

1.3.2.3. IsPostBack

PostBack

U ne page ASP.N ET est gnralem ent utilise plusieurs fois la suite, dans une srie d'changes avec l'utilisateur. Supposons qu'une page d'accueil (accuei 1. htm) soit affiche. L'utilisateur clique sur un lien qui conduit la page saisie.aspx. Com me l'extension de la page est

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 14 - 105

Dvelopper des composants serveur


aspx, celle-ci est traite parSP.N ET. s'agit alors de la prem ire fois que la page A Il est appele. Cette page de saisie peut com prendre des contrles qui provoquent un appel au serveur, par exemple des boutons de type asp:Button. Quand l'utilisateur clique sur un bouton, la mme est appele m ais l ce n'est page pas la prem ire fois : la page prcdente tait la m m e. Une proprit de la classe Page indique si la page est appele la prem ire fois ou non : IsPost Back. Si la valeur de cette proprit est False. il s'agit du premier appel de la page. Si la valeur de IsPostBack est True, la page est appele par elle-mme.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 15 - 105

Dvelopper des composants serveur

Pour crer une application qui met en vidence la proprit IsPostBack, vous pouvez effectuer les manipulations suivantes :
o Crez un nouveau projet Application W eb ASP.NET. Supprim ez la page initiale Default.aspx et ajoutez un nouveau form ulaire W eb appelSaisie.

Ajoutez au projet une page HTML appele accueil.htm. Cliquez droite sur Accuei 1 dans l'explorateur de solutions et slectionnez Dfinir comme page de dm arrage dans le m enu contextuel. Placez un lien sur la page Accueil dont l'URL de destination est Saisie.aspx

o
o

Dans la page Saisie, placez un contrle IblIsPostBack et un con trle Button

W eb Form

Label appel

Vous pouvez m aintenant ajouter le code suivant dans l'vnem ent Page_Load de la page Saisie: Private Sub Page_Load(...) Handles MyBase.Load If IsPostBack Then IblIsPostBack.Text = "IsPostBack est vrai" IblIsPostBack.ForeColor = Col or.Red se El IblIsPostBack.Text = "IsPostBack est faux" IblIsPostBack.ForeColor = Color.Green En d If End Sub

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 16 - 105

Dvelopper des composants serveur

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 17 - 105

Dvelopper des composants serveur

1.3.3.

Les Server Controls

Un petit mot sur les types de contrles prsents dans ASP.NET. Il existe deux jeux de contrles s'excutant ct serveur : Les Web Controls, grs par des vnements, ils ressemblent plus aux objets utiliss dans du dveloppement winforms c'est--dire qu'ils possdent des proprits ("font", "backcolor", ...) facilitant la mise en forme. Ils dpendent de "System.Web.UI.WebControls". Les HTML Controls qui correspondent directement aux balises HTML. Les attributs des balises correspondantes sont accessibles via les proprits de ces contrles. Pour faire une analogie avec les "WebControls", ceux-ci ne possdent qu'une balise "Style" pour la mise en forme, cela est plutt limitatif. Ces derniers dpendent eux de "System.Web.UI.HtmlControls".

Gestion de l' tat, la session, les cookies

M ise e n id e n ce d u p ro b le v m S to c ka g e d e s d e s su r le c lie n t onn S to c ka g e d e s d e s su r le s e rve u r onn

On a vu que chacune des pages effectuait un travail sp cifique, les seules relations entre une page et une autre un appel avec un tant hyperlien. La question qui se pose est com m ent effectuer un traitem ent sur plusieurs pages et particulirem ent com m ent retrouver dans le code associ une page les donnes d'une autre page. le W eb est par essence un systm e tat: l'utilisateur demande sans une page, celle-ci est renvoye par le serveur, puis tout est oubli ! Lors de la prochaine demande de l'utilisateur, le serveur ne se rappellera de rien. En d'autres termes, le serveur ne fait que rpondre des demandes ponctuelles de l'utilisateur, par une, une sans aucune connexion entre elles. Pour resoudre de probleme on peut distinguer plusieurs situations et systmes pour grer l'tat, c'est--dire faire passer la valeur de donnes d'une page une autre. Les quatre prem ires techniques se servent du pour stocker les client donnes :

Utiliser le ViewState, l'tat d'affichage des pages W eb m is en uvre dans des sacs d'tat (state bags).
cachs. U tiliser des cham ps

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 18 - 105

Dvelopper des composants serveur

l'U RL.

Passer les donnes par

Placer

les

donnes

dans

des

cookies

sur

le

poste

de

l'utilisateur. Les techniques suivantes stockent les donnes sur le serveur: Stocker les donnes dans des variables de session. Faire de m m e avec des variables d'application. Utiliser le contexte. Placer les donnes dans le cache.

La gestion de l'tat concerne deux catgories de donnes :

Les valeurs des variables de l'application, principalement les variables de la classe asso la page. cie
Les valeurs des proprits des contrles de la page.

TRAVEAUX PRATIQUES :

Mise en vidence du problme


Prenons un exemple simple pour montrer comment la gestion de l'tat diffre dans les applica tions W eb de ce qu'elle est dans les applications classiques. La page PageEtat1 prsente un contrle TextBox (txtNom ) et un bouton OK (btnOK). Quand lisateur clique sur le l'uti bouton, le contenu de la zone de saisie est recopi dans une variable declasse ap pele N om (il s'ag it d'un m em bre de la classe associe la page) : ' V ariab le con te n an t le no m P rivate N o m A s Stn 'n g Private Sub btnO K_Click(...) H andles btnOK .Click S to c k e le n o m d a n s u n e v a ria b le N o m = tx tN o m . T e x t End Sub
Document
C-A-001.doc

OFPPT @

Millsime
mars 09

Page 19 - 105

Dvelopper des composants serveur

Un second bouton sur la page (btnAfficheNom ) permet d'afficher dans un contrle Label lN o m ) le co n te n u de la variab le N o m (Ib Private btnAfficheN om _Click(...) H andles btnAfficheNom .Click ' A ffiche le contenu de la variable IblN om .Text = Nom End Sub Sub

1.3.4.

ViewState

Prenons un peu le temps de voir le code HTML de la page excute :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 20 - 105

Dvelopper des composants serveur

Vous constatez que des champs cachs ont t gnrs. Le champ nomm _VIEWSTATE .

Les donnes d'tat de la page


chaque page est associ tat d'affichage (View State), qui stocke un l'ensemble des donn de la page et de ses contr Cet tat es les. d'affichage est implment dans un objet de classe StateBag (littralement, sac d' tat), qui enregistre les donn sous la forme de es paires de cl et de valeurs, dans un dictionnaire. s

NO TE:Pour que tat d affichage soit oprationnel, il faut que latpropri l EnableviewState de la page soit True.

Ces donn es sont transport du serveur une page sur le poste de es l'utilisateur, puis de celle-| au serveur nouveau, dans un cham p cach ci du form ulaire (un cham p de type <input type=hidden>). Le contenu de ce champ correspond l'ensemble des valeurs qui se trouvent l'objet dans StateBag, codes de tette faon qu'elles soient transportables sur le protocole HTTPet qu'il ne soit pas facile de lescoder ou de les d modifier. L'tat d'affichage n'est utilisable que sur lame page appel m e plusieurs fois, pas entre plu sieurs pages diff rentes.

On peut accder l'objet StateBag associ une page gr la propri ce t ViewState de l'objet Page. La cl associ e une donne est automatiquement e si celle-ci n'existe pas, ou elle est remplac cr e dans le
V iew S tate("N om ") = V alue

OFPPT

pour stocker le contenu de Value sous le nom Nom . On pourra ensuite relire cette donn e Document Millsime Page @ C-A-001.doc mars 09 21 - 105

Dvelopper des composants serveur


N o m = V ie w S ta te("N o m " )

On peut ainsi transformer la page de l'exemple pr cdent afin de stocker le nom, non plus dans une variable de la classe, mais dans l'objet StateBag de la page. on peut rem placer la d claration de la variable Nom par une propri m e nom et t de m qui utilise l'objet StateBag :
Private Property N om () As ng G et Stri N o m = V ie w S tate("N o m " ) End G et S et(B yV al V alue As S tri View State("Nom ") = V alue ng) E n d S e t nd Pro pe rty E

Ainsi, le code qui utilise la donn e Nom reste le m e : m


Private Sub btnOK_Click(...) Handles btnOK .Click ' S to cke le n o m dan s u ne variab le N o m = tx tN o m .T e x t End Sub Private Sub btnAfficheNom_Click(...) Handles btnAfficheNom.Click ' Affiche le contenu de la variable Ib lN o m .T e xt = N o m End Sub

Avec cette nouvelle version, le nom s'affiche bien quand on clique sur le bouton.

1.3.5.

Cookies

Stockage des donnes dans des cookies


Un cookie est du texte stock sur le poste du client. Il est gnralement enregistr la demande du serveur, par l'intermdiaire de la proprit Cookies de l'objet HttpResponse

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 22 - 105

Dvelopper des composants serveur


retourn par la proprit Response de la page. Il peut tre lu travers la proprit Cookies de l'objet HttpRequest retourn par la proprit Request de la page. Pour crire un cookie, qui est un couple nom-valeur, il suffit de lui donner une valeur,quant en indi son nom comme param de la collection Cookies. Si le cookie existait d est rem plac tre j, il , dans le cas contraire, il est cr :
I Response.Cookies(''MonCookie").Value = "La valeur"

Un cookiecrit de cette fa n'est pas permanent : il n'existe qu'en m on moire, donc pendant la dure de l'application. Il dispara quand celle-ci s'arr tra tera. Pour rendre un cookie permanent, il faut indiquer une date d'expiration. Par exemple :
Response.Cookies("MonCookie").Value = "La valeur" Response.Cookies("MonCookie").Expires = #1/1/2030#

Le cookie sera alors crit sur le disque de l'utilisateur et y restera jusqu'date d'expiration la ou jusqu' ce qu'il soit effac . On peut lire un cookie en utilisant la m collection Cookies, maie appliqu l'objet me e HttpRequest. Voici le code qui relit le cookie pr crit cdemment :
| M onC ookie = R equest.C ookies("M onC ookie"). V alue

Si le cookie existait dans cette application, sa valeur est retourn e. Dans le cas contraire, la valeur de retour est une cha de caract ne res vide. L'ensemble des cookies d'une application est transmis avec chaque demande de l'utilisateur. Il est donc pr frable de ne placer que de petites quantit donn s de es dans les cookies, afin de ne pas grossir la trame HTTP circulant sur seau, d'autant plus que la taille d'un cookie ellele r est mme limit e.

La page exemple SaisieNom dispose d'un bouton Affiche avec cookie. Quand l'uti lisateur clique dessus, le contenu du champ de saisie estplac un cookie temporaire dans appel Nom . L'application est ensuite redirig e vers une autre page, l'aide de la m thode Redirect de l'objet HttpResponse :
Private Sub btnOKCookie_Click(...) Handles btnOKCookie.Click Response.Cookies("Nom").Value = txtNom.Text ' Supprimez le commentaire de la ligne suivante pour rendre le cookie permanent 'Response.Cookies("Nom").Expires = #1/1/2030* R esponse.R ed irect("A fficheN om C ookie.aspx") End Sub

La page A f fiacheN om C ookie affiche le texte lu dans le cookie.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 23 - 105

Dvelopper des composants serveur

Private Sub Page_Load(...) H andles M yB ase.Load IblNom.Text = Request.Cookies("Nom").Value d S u b En

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 24 - 105

Dvelopper des composants serveur

Stockage des donn sur le serveur es


Toutes les techniques sentes prcdemment stockent les donn sur le poste du client. pr es Celles de cette section les placent sur le serveur. Cela pr sente quelques avantages :

Les donn ne sont jamais visibles par le client. es Elles ne circulent pas sur le r seau et ne l'encombrent donc pas. Elles ne sont pases au poste utilis par le client, comme c'est le cas pour les li cookies(si l'utilisateur utilise un autre poste, il ne dispose pas de ses cookies). Leur acc est plus rapide, puisqu'elles se trouvent dsur le serveur. s j

Le stockage des donn sur le serveur sentegalement quelques inconv es pr nients : Les donn es occupent de la place sur le serveur, ce qui peut devenir ennuyeux si beaucoupd'utilisateurs acc dent l'application. L'utilisateur peut tre li au serveur sur lequel se trouvent les donn bien es, qu'ASP.NET propose des solutions pour cela.

Les variables d'application


Une variable d'application est conserv dans un objet particulier, e HttpApplicationretourn par la propri Application de la page. , t Cet objet comprend des donn lies une application. es Au fait, qu'est-ce qu'une application Web? Il s'agit de l'ensemble des fichiers, pages, gestionnaires, modules et code s dans un situ rpertoire virtuel et ses sous-r pertoiressur un serveur W eb donn . Pour cr er une variable d'application, il suffit de la nommer et de lui donner une valeur, un peu comme pour les cookiessents plus haut : pr | Application("NomVariable") = "Valeur variable" de classe

Si la variable du nom indiqu existait d sa valeur est remplac sinon elle est cr j, e, e. L'utilisation de variables d'application est donc mement simple. extr Il faut cependant faire quelques remarques :

Une variable d'application est vue par tous les utilisateurs de l'application. Il ne faut donc pas y stocker des donn spcifiques un utilisateur, mais plut des es t donnes communes toute l'application, par exemple le nom de la t ou une soci table de taux de TVA ou compter le nombre des utilisateurs connectes.

Les variables d'application sont stockdans le serveur W eb qui les crDans le cas es e. d'une ferme de serveurs (plusieurs serveurs qui jouent les r des semblables), la demande d'un utilisateur peut dirig vers un serveur ou un autre selon leur tre e

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 25 - 105

Dvelopper des composants serveur

charge. Une appli cation peut donc ne pas disposer des es cr es par la m donn me application sur un autre serveur. Lors de la modification de la valeur d'une variable d'application, il existe un risque que d'autres utilisateurs effectuent un changement de me variable au m la m me moment. Il convient donc de synchroniser l'acc ces variables, comme cela est montr s dans l'exemple suivant. On place donc nralem ent dans les variables d'application des es en lecture g donn seule. Ces variables sont alors utilis comme une sorte de cache pour des es donnes qui ne varient pas peu pendant la dur de vie de l'application. ou e Il faut cependant bien initialiser les variables d'application quelque part. Cela peut tre fait quand l'application marre, en plaant du code spcifique dans le fichier global.asax de d l'application qui est ajout un projet Web par Visual Studio .NET lors de sa cr Ce ation. fichier comprend des donn et du code globaux l'application. On peut notamment y es ajouter des procdures qui seront appel par le serveur Internet quand certains es vnements se produi ront. Il suffit, pour cela, de river une classe de la classe d HttpApplication et d'y crire lesprogrammes cessaires. n Pour g rer les variables application, on peut du code dans les proc crire dures suivantes : Init et Application_OnStart sont appel au dmarrage de l'application. On y ins es re donc g nralement le code d'initialisation des variables. Dispose et Application_OnEnd sont appel quand l'application se termine. es Une application marre la premi fois qu'un utilisateur appelle une page qui en d re fait partie. Si le serveur Web est arr t, elle l'est aussi. D'autre part, si le fichier global .asax est modifi l'application est arrte puis , redmarre. On peut remarquer qu'il existe deux proc dures pour le d marrage et l'arr de t l'application. Les constructeurs et destructeurs Init et Dispose sont appel s pour chaque objet HttpAppli ation cr , tandis que les proc c dures Application_OnStart et Application_OnEnd sont appel es la premi cration. Il est donc nralement re g prfrable d'initialiser les donn dans le constructeur Init. es La page AfficheNomApplication affiche une donne place dans une variable Application appele Nom par la page appelante, SaisieNom. Celle-ci excute le code suivant lors du clic sur le bouton Affiche avec application: Private Sub btnOKApplication_Click(...) Handles btnOKApplication.Click Application.Lock() Application("Nom") = txtNom.Text Application.Unlock() R es p o n s e .R e d irec t("A ffic h e N o m A p p lic a tio n .a s p x ") End Sub -

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 26 - 105

Dvelopper des composants serveur


On peut remarquer dans ce code que l'affectation de la valeur variable Application la est accompagn e d'un appel aux m thodes Lock puis UnLock. Lock verrouille l'objet Application afin d' viter qu'une modification y soit effectu en mme temps par un e autre thread.

La page AfficheNomAppl i cati on affiche la valeur e dans la variable stock Application lors de son chargement : P riv a te S u b P ag e_ L o ad (...) H a n d le s M yB as e .L o a d ' Donn initial ne par la page appelante e IblNom.Text = Application("Nom") ' Donn es initialis es dans Global.asax IblInit.Text = Application("Init") IblOnStart.Text = Application("OnStart") End Sub
Vous pouvez remarquer que le code de traitement vnement Load affiche de l' galement les valeurs de deux autres variables (figure 7-10). Celles-ci ont t initialis es dans des procdures vnement de Global .asax :

Public Class Global Inh eri ts S ystem .W eb .H ttpA pp licati on Public O verrides Sub () Init Application("Init") = "Donne initialise dans Init" End Sub Sub Application_O nStart(ByVal sendr As O bject, ByVal e As EventArgs) Application(O nStart") = "Donne initialise dans Application_O nStart" End Sub End Class

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 27 - 105

Dvelopper des composants serveur

Les variables partages


L'utilisation de l'objet Application pour conserver des donntait courante dans es les versionsprcdentes d'ASP. Elle pr sente cependant quelques inconv nients, particuli rement le fait que les donn n'y sont pas typ es es, ce qui allonge les temps de traitement lorsqu'on y acc de. On pourrait tre tent d'utiliser des variables d'instance de l'objet Application (appel Global par dfaut) d clar dans Global

.asaxCela n'est cependant .

pas possible, car il peut exister sieurs objets Application s partir de la plu cr classe Global. Quand une page est appel e sur le serveur, ASP.NET peut, soit fabriquer un nouvel objet Global, soit utiliser un objet existant.ne peut donc On pas avoir de certitude sur l'objet Global employ une page, et ses variables par d'instance ne peuvent donc pas mmorises d'un appel l'autre. tre Il est cependant possible de d clarer des variables partag dans la classe Global es avec le m ot- Shared. Une telle variable s'utilise pendamment de la ation cl ind cr d'un objet, elle est donc globale l'application. Voici, par exem ple, une variable d dans G lobal .asax, dans la classe G lobal clare Public Class Global Inherits S ystem .W eb.HttpApplication P u b lic S h ared N o m A s S trin g L a v ariab le N om pe u t alo rs va lo ris da ns u ne p ag e, com m e dan s la p ag e S aisieN o m tre e la suite d'un clic sur le bouton Affiche avec variable Shared: Private Sub btnO KShared__Click(...) Handles btnO KShared.Click SyncLock M e G lobal.N om = txtNom .Text End SyncLock R e sp o n se .R ed ire ct("A ffic h e N o m S h a re .as p x ") End Sub Le probl e de l'acc sim ultan la donne par plusieurs threads se pose m s nouveau. Il est r ici en plaant le code qui acc la donne dans une section de gl de synchronisation, ce qui garantit qu'un seul thread peut ex la section la fois. cuter L'utilisation d e la d on n fait d an s u ne autre page, A f fi ch eN o m S h ared (il n'est pas e se ncessaire synchroniser l'acc la donn e en lecture seule de s : Affichage du nom aprs passage par une variable partage

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 28 - 105

Dvelopper des composants serveur

Private Sub Page_Load(...) Handles M yBase.Load IblNom.Text = Global.Nom End Sub

Les variables de session Si les variables d'application sont ressantes pour stocker les int donnes d'une application, elles ne permettent pas de distinguer un utilisateur d'un autre. Les variables de session r pondent cette insuffisance, car elles sont associ l'utilisateur courant. es La notion de session Pour mettre en uvre les variables de session, ASP.NET d une finit notion de session qui com prend l'ensemble des actions d'un utilisateur dans une application. Une session est reconnue un identificateur par de session cr par ASP.NET. Il s'agit d'une ne de caract cha res de 120 bits (par exemple, 302dvbynpstxl3iOrugglb45), dont l'unicit est garantie gr ce l'utilisation d'un algorithme sp cifique. De plus, la structure de cette cha est non triviale, ce qui ne vite qu'elle soit manipul e l'insu du syst me (par exemple, pour se faire passer pour quelqu'und'autre). Quand un nouvel utilisateur appelle une page d'une application ASP.NET pour la premi fois, un nouvel identificateur lui est attribu re . Celui-ci accompagne ensuite toutes les r ponses du syst me et les demandes de l'usager, ce qui permet de l'identifier. Deux techniques peuventtre utilis es pour cela : un cookie particulier enregistr sur le poste de l'utilisateur, ou l'inclu de l'identificateur dans l'URL, sion essentiellement si les cookies ne sont pas autoris le navigateur s par de l'utilisateur. Pour acc der aux informations d'une session, la classe Page expose une propri t, Session, quiretourne une frence un objet r HttpSessionState. Celui-ci dispose de propri et de m ts thodes, dont la propri SessionID qui renvoie l'identificateur de session t

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 29 - 105

Dvelopper des composants serveur

courant. On peut crire, pour placer l'identificateur de session dans un contrle label appel IblSessionID : | IbISessionID.Text = Session.SessionID

Le rsultat est une cha de caract ne res comprenant l'identificateur de session (voir l'exemple suivant). La configuration de la on dont la session fonctionne fa se fait dans le fichier Web.config, situ dans le pertoire r d'une application Web. Il s'agit d'un autres, une balise fichier appel e XML comprenant, entre

sessionState qui fait partie de la section System.web du fichier. Cette balise comprend plusieurs attributs qui dfinissent les caract ristiques de la session

L e s a t tr ib u t s d e la s e c t io n S y s t e m .w e b d u f ic h ie r d e c o n f ig u r a t io n w e b .c o n f ig

Voici le contenu de cette cette section: <configuration> <system.web > <sessionState mode="InProc"

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 30 - 105

Dvelopper des composants serveur

stateConnectionString="tcpi p=12 7 . 0 . 0 . 1 : 42424" sqlConnectionString="datasource=127.0.0.1;user id=sa;password=" cookieless="false" timeout="20" /> </system.web> </configuration> Quand l'attribut cookieless a sa valeur par dfaut False, le SessionID est transmis sur le poste l'utilisateur par l'intermdiaire d'un cookie. En de revanche, si on donne cookieless la valeur True, le SessionID est transmis dans l'URL, sous la forme d'un pseudo-rpertoire dont le nom est la valeur de l'identificateur.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 31 - 105

Dvelopper des composants serveur

L'attribut

mode

indique

l'emplacement

de

stockage

des

variables. La modification de la valeur de cet attribut peut avoir une influence sur les performances et sur la disponibilit donn des es de session. Les valeurs possibles sont les suivantes : Of f, les donn de session ne sont pas gard Les variables de session ne doivent es es. donc pas tre utilis es si m ode a cette valeur. InProc, les donn de session sont stock en m es es moire sur le serveur. Cette valeur donne les meilleures performances (il s'agit d'ailleurs de la valeur par d mais ne faut), permet pas de conserver les donn en cas de panne ou d'utilisation de plusieurs ser es veurs ou processus. StateServer, les donn de session sont gard sur le serveur identifipar la valeur es es de stateConnectionString. Cette cha doit comprendre l'adresse du serveur suivie ne du port utiliser, qui est par faut 42424. La valeur par faut, d d tcpip=127. .0 .1:42424, indiqueque les donnes sont stockes sur le serveur local 0 (l'adresse IP 127.0.0.1 identifie le serveur local). SQLServer, les donn de session sont stock sur le serveur SQL Server identifi es es par la valeur de sqlConnectionString. Il s'agit d'une cha de connexion SQL Server. ne Les deux derni res options sont particuli rement int ressantes et n'existaient pas dans les versions pr cdentes d'ASP. Elles permettent de partager les es de session entre donn plusieursprocessus. La valeur StateServer indique que les donn de la session sont plac sur le serveur es es spcifi par stateConnectionString (un serveurtat). On peut alors envisager deux d' configurations : II n'existe qu'un serveur W eb, mais plusieurs processus peuvent faire fonctionner la mme application. L'utilisation de cette valeur permet de ne pas lier un utilisateur un processus particulier. La valeur InProc ferait que, si l'utilisateur connect un tait processus diff rent d'une page l'autre, les valeurs de ses variables de session seraient perdues. Quand plusieurs serveurs Web sont utilis s pour la m me application (on parle de ferme de serveurs), le serveurtat peut tre commun l'ensemble des serveurs d' Web. De cette fa on, les demandes d'un utilisateur ne sont pas li un serveur es physique particulier et la r partition de charge entre les serveurs peut pleinement tre exploit e.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 32 - 105

Dvelopper des composants serveur


La valeur SQLState de l'attribut mode permet d'aller encore plus loin, puisque les donnes des variables d'application sont places sur un serveur SQL Server. De cette faon, mme si un serveur W eb tom be en panne, les donnes ne sont pas perdues. Le dernier attribut de la balise sessionState, timeout, indique le temps d'inactivit, en minutes, aprs lequel la session est ferme. Par dfaut, cette valeur est de vingt minutes. La fermeture d'une session permet de librer toutes les donnes qui lui sont associes. Si l'application gre des donnes sensibles, comme un compte en banque, il peut tre prfrable de diminuer cette valeur, afin de ne pas garder en mmoire des donnes concernant un utilisateur qui n'utilise plus l'application. On peut d'ailleurs forcer une fin de session, en appelant la mthode Abandon :

Session.Abandon

Cela peut tre effectu, par exemple, en rponse un clic de l'utilisateur sur un bouton de dcon nexion plac sur la page. Aprs la fermeture d'une session, automatiquement ou manuellement, toutes ses donnes sont dtruites.

Les variables de session


Comme les variables d'application, les variables de session sont simplement fabriques en les nommant : si la variable existe, elle est utilise, sinon efle est cre. Pour donner une valeur la variable de session N om , on peut sim plem ent crire :
Session('Nom ") = "Nouvelle valeur" -

I II n'est pa s ncessaire de m ettre en uvre un m ca nism e de synchronisa tion pour les varia bles de session | car elles ne sont norm alem ent rejointes que par un seul thread, n'tant lies qu' un seul utilisateur.

L'initialisation des variables de session peut se faire dans une procdure Session_OnStart (ou Session_Start) et Session_OnEnd permet d'effectuer les traitements de fin de session. Ces deux procdures doivent tre crites dans le fichier global .asax, com me cela a t expliqu dans lasection relative aux variables d'application. La page AfficheNomSession affiche une variable de session initialise lors de la saisie du nom de l'utilisateur dans la page Sai si eNom. Elle affiche galement la valeur d'une variable initialise dans la procdure Session_OnStart .

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 33 - 105

Dvelopper des composants serveur

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 34 - 105

Dvelopper des composants serveur

La valorisation de la variable suite de la saisie du nom est effectu le code suivant la e par

Private Sub btnOKSession_Click(...) Handles btnOKSession.Click Session("Nom") = txtNom.Text Response.Redi rect("AfficheNom Sessi on.aspx") End Sub L'initialisation des variables dans global .asax est : Sub Application_OnStart(ByVal sender As Object, ByVal e As EventArgs) Application("OnStart") = "Donn e initiaise dans Application_OnStart" End Sub Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) Session("Start") = "Donne initialise dans Session_Start" E n d S u b Enfin, l'affichage des variables est r par le code suivant alis P rivate Sub P age_Load(...) Handles M yB ase.Load IblNom.Text = Session("Nom") IbISessionID.Text = Session.SessionID IblSession.Text = Session("Start") IblSessionl.Text = Session("OnStart") End Sub

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 35 - 105

Dvelopper des composants serveur

Le contexte
La propri t Context d'une page retourne l'objet HttpContext associla page. Celui-ci fournit des inform ations sur la requ HTTP ayant provoqu te son appel. Parm i les m em bres de la classe HttpContext, la propri Handler donne acc un objet HttpHandler qui repr t s sente la page l'origine de l'appel. Cela permet d'acc ses donn der es. Pour que le contexte permette cuprer les donnes de la page pr de r cdente, il faut que l'appel de la page se fasse l'aide de la m thode Server.Transfer et non pas Response.Redirect.

|les donn es du contexte ne sont valides que pour la te en cours. Elles sont donc perdues lors de la r requ equte suivante.

L'utilisation du contexte peut se faire castant la propri t Handler en un type correspon en dant la page appelante. La ligne suivante perm et der la propri Nom d d'acc t finie dans la ag e p S aisieN o m :
Private Sub Page _Load(...) Handles M yBase.Load IblNom.Text = CType(context.Handler, SaisieNom). Nom E n d S u b

Voici le code de la page SaisieNom


' Propri t Nom pour le contexte Public ReadOnly Property Nom() As String C et Return txtNom.Text End Gt e End Property Private Sub btnOKContext_Click(...) Handles btnOKContext.Click 'Utilise Server.Transfer au lieu de Response.Redirect Server.Transfer("AfficheNomContext.aspx") End Sub

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 36 - 105

Dvelopper des composants serveur

Le c a c h e
Le cache d'ASP.NET est un lieu de stockage de donnes qui peut tre utilis la fois pour cacher des pages, c'est--dire les m m oriser afin d'viter de les rgnrer chaque demande, et pour enregistrer des donnes. Pour le stockage de donnes, le cache ressemble donc l'objet Appli cation dans la mesure o les valeurs qui y sont places sont prives l'application. Mais a c h e dispose galem ent de m canism es c le com plm entaires qui perm ettent de contrler la dure des donnes qu'il de vie contient en librant la mmoire quand elle n'est pas utilise, ou de conditionner les donnes des ressources externes. Placer des donnes dans le cache se fait trs simplement, com me pour l'objet Application :
P riva te S ub b tnO K C ach e_ C lick(...) H an dles btn O K Ca ch e.Click C a ch e ("N o m " ) = tx tN om .T ex t Response.Redirect("AfficheN om Cache.aspx") End Sub

On peut galem ent utiliser les m thodes Insert et Add de l'objet Cache pour ajouter des donnes dans le cache. Ces m thodes peuvent recevoir des param tres com plm entaires perm ettant dfinir, notamm ent, la dure de vie des donnes. de L'obtention des donnes du cache se fait tout aussi simplement (figure 7-14) :
P riv a te S u b P a g e _ L o a d ( ...) H a n d le s M y B a s e .L o a d Ib lN o m .T e x t = C a c h e (" N o m ") End Sub

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 37 - 105

Dvelopper des composants serveur

Rsum
Nous avons vu que si la gestion de l'tat est un vritable problme pour les applications W eb, elle dispose galement de nombreuses solutions. Plusieurs mcanismes per ettent de stocker les donnes d'une page sur le client, ou sur le m serveur. Des techniques nouvelles dans ASP.NET perm ettent m m e de stocker les donnes sur un serveur partag plusieurs serveurs W eb. par

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 38 - 105

Dvelopper des composants serveur

1.3.6.

Variable de session

"Session" est un objet qui s'utilise un peu comme le ViewState, c'est--dire avec une cl mais se comporte plutt comme une table de hachage. Prenons deux pages aspx : page1.aspx : page dans laquelle nous encodons, par l'intermdiaire d'une TextBox, un nom de socit page2.aspx : page dans laquelle nous affichons le nom de la socit (vous comprenez que le but est d'avoir une page d'affichage de donnes de socit se trouvant par exemple dans une base de donnes) Protected Sub cmdAfficheSoc (Byval sender As Object, ByVal e As System.EventArgs) Handles cmdAfficheSoc.Click Session("NomSoc") = txtNomSoc.Text Response.Redirect("page2.aspx") End Sub Code de la page1.aspx : L'utilisateur introduit un nom de socit dans la TextBox nomme "txtNomSoc". Cette information est sauve en Session avant de passer la page2.aspx Protected Sub Page_Load (Byval sender As Object, ByVal e As System.EventArgs) Handles Me.Load If Session("NomSoc") IsNot Nothing Then lblNomSoc.Text = CType(Session("NomSoc"), String) Else Response.Write("Aucune socit n'a t choisie !") End If End Sub Code de la page2.aspx : Un test est effectu pour savoir si la variable de session contient bien une donne. Celle-ci est affiche en passant par un transtypage. Il est vident que cet exemple est trs simpliste et que l'objet Session permet bien d'autres utilisations. Voici quelques points lis l'objet Session (liste non exhaustive) : Initialisation de l'objet Session : vnements Session_Start et Session_End dclenchs par le serveur et accessibles via le fichier Global.asax Expiration de la session Session avec ou sans cookies Session scurise

1.3.7.

Variable d'application

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 39 - 105

Dvelopper des composants serveur La grande diffrence avec l'objet Session se situe dans le fait qu'un objet Application conserve des donnes pour l'ensemble des utilisateurs d'un mme site web. Il s'utilise de la mme manire que l'objet Session.

Protected Sub Page_Load (Byval sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim cpt As Integer = 0 Application.Lock() If Application("Compteur") IsNot Nothing Then cpt = CType(Application("Compteur"), Integer) End If cpt = cpt + 1 Application("Compteur") = cpt Application.UnLock() lblVisite.Text = "Page vue : " & cpt & " fois." End Sub
L'objet Application tant commun tous les utilisateurs du site, il est prfrable de bloquer l'accs lors de l'criture et, bien entendu, de ne pas oublier l'action inverse.

1.3.8.

L'objet Cache

Comme l'objet Application, il conserve aussi des donnes accessibles tous les utilisateurs mais il possde quelques avantages non ngligeables:

Gestion interne de locking Plus rapide Gestion des dpendances

En ce qui concerne les dpendances, on peut en citer quelques-unes trs succinctement car ce genre de programmation demanderait presque un tutoriel elle toute seule !

Dpendances de temps : permet de faire expirer automatiquement une donne une date/heure absolue Dpendances fichiers : le serveur d'application peut mettre jour des donnes lorsque celles-ci sont modifies dans le fichier associ Dpendances SQL : sous SqlServer 2000 et 2005. Agit de la mme manire avec une base de donnes grce au "poling" (interrogation du serveur vers la BD). le callback : association d'une procdure qui est rappele, non pas ds que la donne est supprime mais la prochaine excution de la page qui contient la procdure

1.3.9.

Caching (ou cache HTML)

Un autre aspect de la mise en cache des donnes suivant diverses mthodes. Ici aussi, il serait trop long d'tendre leur mode d'utilisation.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 40 - 105

Dvelopper des composants serveur Cache de sortie (output cache) : prend une "copie" instantane du flux HTML puis supplante toute action de requte en imposant sa "copie" garde en cache substitution : ce contrle permet de ne pas mettre en cache une partie de la page mme si le cache est activ profils de cache : peuvent tre crs dans le Web.Config et associ par leur nom aux pages qui en ont besoin fragments de cache : fonctionne comme le cache de sortie mais donne la possibilit au programmeur de ne mettre en cache qu'une partie de la page HTML. Le frament caching peut se faire grce aux usercontrols qui disposent eux-mmes d'une directive Output

1.3.10.

QueryString

QueryString permet de faire passer des informations via l'URI d'une page une autre. En reprenant l'exemple d'un ID de socit slectionn dans une page dont les donnes sont prsentes dans une autre page, on aurait trs bien pu indiquer cet ID via l'URI lors de l'appel la deuxime page. Vous avez choisi la socit ayant un ID = 1235, voici comment passer l'identifiant la page suivante : <A href="page2.aspx?idsoc=1235"></A> Pour rcuprer l'ID dans la seconde page, il vous suffira de coder comme suit : <p>Vous avez choisi la socit : & Request.QueryString("idsoc")</p> Vous comprenez maintenant le pourquoi de certaines url complexes du genre : http://www.monsite.com/repertoire/liste.asp? id=1257&lng=fr&action=del&email=abc@prov.fr

1.4.

Contrles utilisateur ASP.NET

Il peut arriver que vous ayez besoin dans un contrle de fonctionnalits dont les contrles serveur Web ASP.NET intgrs ne disposent pas. Vous pouvez alors crer vos propres contrles. Pour ce faire, vous disposez de deux options : Vous pouvez crer : o Des contrles utilisateur. Les contrles utilisateur sont des conteneurs dans lesquels vous pouvez placer des balises et des contrles serveur Web. Vous pouvez ensuite traiter le contrle utilisateur comme une unit et lui assigner des proprits et des mthodes. Des contrles personnaliss. Un contrle personnalis est une classe que vous crivez et qui drive de Control ou de WebControl. Document
C-A-001.doc

OFPPT @

Millsime
mars 09

Page 41 - 105

Dvelopper des composants serveur Les contrles utilisateur sont beaucoup plus faciles crer que les contrles personnaliss, dans la mesure o vous pouvez rutiliser des contrles existants. Il est donc particulirement facile de crer des contrles comportant des lments d'interface utilisateur complexes. Cette rubrique fournit une vue d'ensemble de l'utilisation des contrles utilisateur ASP.NET.

1.4.1.

Structure de contrle utilisateur

Un contrle Web ASP.NET ressemble une page ASP.NET complte (fichier .aspx), avec la fois une page d'interface utilisateur et du code. Un contrle utilisateur se cre de faon trs semblable une page ASP.NET. On lui ajoute par la suite le balisage et les contrles enfants ncessaires. Tout comme une page, un contrle utilisateur peut inclure du code servant manipuler son contenu, et notamment effectuer des tches telles que des liaisons de donnes. Un contrle utilisateur prsente les diffrences suivantes par rapport une page Web ASP.NET : L'extension du nom de fichier du contrle utilisateur est .ascx.

Au lieu d'une directive @ Page, le contrle utilisateur contient une directive @ Control qui dfinit la configuration et d'autres proprits.

Les contrles utilisateur ne peuvent pas s'excuter comme des fichiers autonomes. Vous devez au lieu de cela les ajouter des pages ASP.NET, comme vous le feriez pour n'importe quel contrle.

Le contrle utilisateur ne contient pas d'lment html body ou form. Ces lments doivent se trouver dans la page d'hbergement.

Vous pouvez utiliser sur un contrle utilisateur les mmes lments HTML (sauf les lments html, body ou form) et les mmes contrles Web que dans une page Web ASP.NET. Par exemple, si vous crez un contrle utilisateur afin de l'utiliser comme barre d'outils, vous pouvez placer dessus une srie de contrles serveur Web Button et crer des gestionnaires d'vnements pour les boutons. L'exemple suivant montre un contrle utilisateur qui implmente un contrle Spinner dans lequel les utilisateurs peuvent cliquer leur guise sur des boutons pour naviguer dans une srie de choix au sein d'une zone de texte.
<%@ Control Language="VB" ClassName="UserControl1" %>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 42 - 105

Dvelopper des composants serveur


<script runat="server"> Protected colors As String() = {"Red", "Green", "Blue", "Yellow"} Protected currentColorIndex As Integer = 0 Protected Sub Page_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) If IsPostBack Then currentColorIndex = CInt(ViewState("currentColorIndex")) Else currentColorIndex = 0 DisplayColor() End If End Sub Protected Sub DisplayColor() textColor.Text = colors(currentColorIndex) ViewState("currentColorIndex") = currentColorIndex.ToString() End Sub Protected Sub buttonUp_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) If currentColorIndex = 0 Then currentColorIndex = colors.Length - 1 Else currentColorIndex -= 1 End If DisplayColor() End Sub Protected Sub buttonDown_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) If currentColorIndex = colors.Length - 1 Then currentColorIndex = 0 Else currentColorIndex += 1 End If DisplayColor() End Sub </script> <asp:TextBox ID="textColor" runat="server" ReadOnly="True" /> <asp:Button Font-Bold="True" ID="buttonUp" runat="server" Text="^" OnClick="buttonUp_Click" /> <asp:Button Font-Bold="True" ID="buttonDown" runat="server" Text="v" OnClick="buttonDown_Click" />

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 43 - 105

Dvelopper des composants serveur

1.4.2.

Ajout d'un contrle utilisateur une page

Pour utiliser un contrle utilisateur, vous devez l'inclure dans une page Web ASP.NET. Lorsqu'une demande est soumise concernant une page et que cette page contient un contrle utilisateur, celui-ci passe par toutes les tapes du traitement qu'effectuent tous les contrles serveur ASP.NET. Pour insrer un contrle utilisateur dans une page Web Forms

1. Dans la page Web ASP.NET conteneur, crez une directive @ Register


comprenant :

Un attribut TagPrefix, qui associe un prfixe au contrle utilisateur.

Ce prfixe sera inclus dans la balise d'ouverture de l'lment du contrle utilisateur.

Un attribut TagName, qui associe un nom au contrle utilisateur.

Ce nom sera inclus dans la balise d'ouverture de l'lment du contrle utilisateur.

Un attribut Src, qui dfinit le chemin d'accs virtuel au fichier

contrle utilisateur que vous incluez. 2. Dans le corps de la page Web, dclarez l'lment contrle utilisateur l'intrieur de l'lment form. 3. ventuellement, si le contrle utilisateur expose des proprits publiques, dfinissez-les de faon dclarative.

1.5.

Validation des donnes

La validation des donnes est en gnral la chose la plus importante dans un site web. Ici, nous allons pouvoir travailler ct client et ct serveur, c'est indispensable pour prvenir au plus tt l'utilisateur d'une erreur ventuelle. En effet, il est inutile d'envoyer une demande au serveur si l'information transmise est errone : cela gnre une perte de temps et un encombrement inutile du serveur. La validation ct client est donc celle qui intervient la premire et se fait en gnral en JavaScript. ASP.NET fournit des contrles de validation qui gnrent le code javascript associ, vous vitant de connatre fond le langage et de devoir taper le code. Les principaux contrles de validation sont : RequiredFieldValidator RangeValidator Document
C-A-001.doc

OFPPT @

Millsime
mars 09

Page 44 - 105

Dvelopper des composants serveur CompareValidator RegularExpressionValidator CustomValidator ValidationSummary Voyons un peu les caractristiques gnrales de chacun.

1.5.1.

RequiredFieldValidator

Le plus frquemment utilis car il est le seul qui peut s'assurer qu'un champ n'est pas vide. En effet, tous les autres contrles de validation acceptent un champ vide donc, associer ce contrle de validation aux autres contrles permet cette vrification essentielle. Le RequiredFieldValidator a donc pour fonction de vrifier qu'un champ a t modifi. Ses proprits principales renseigner sont :

Nom de proprit
ControlToValidate ErrorMessage InitialValue Text

la

Utilisation
doit contenir le nom du contrle valider message afficher en cas d'erreur dans le contrle ValidationSummary contient une valeur qui invalide le contrle si celuici est gal cette valeur prcise texte affich en cas de non validation

Exemple de RequiredFieldValidator sur une TextBox nomme TxtNom :

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TxtNom" ErrorMessage="Admin n'est pas un nom valide" SetFocusOnError="True" InitialValue="Admin"> </asp:RequiredFieldValidator> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="TxtNom" ErrorMessage="Le champ nom est obligatoire" / > Vous remarquez que pour valider le nom qui est obligatoire, il nous faut 2 contrles RequiredFieldValidator. Un pour signaler que le nom ne peut pas tre un champ vide, l'autre pour interdire l'utilisation du nom "Admin".

1.5.2.

RangeValidator

Comme son nom l'indique, il sera utilis pour valider l'encodage entre des bornes donnes. Par exemple, encoder un nombre entre 1 et 10. Les proprits sont pratiquemment identiques celles du contrle prcdent :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 45 - 105

Dvelopper des composants serveur Nom de la proprit Utilisation


ControlToValidate ErrorMessage MinimumValue MaximumValue Text doit contenir le nom du contrle valider message afficher en cas d'erreur dans le contrle ValidationSummary valeur minimale de la plage de donnes valeur maximale de la plage de donnes texte affich en cas de non validation

Exemple de validation entre 1 et 10 :


<asp:Label ID="Label1" runat="server" Text="Entrez une valeur comprise entre 1 et 10 :"</asp:Label> <asp:TextBox ID="TxtValeur" runat="server"></asp:TextBox> <asp:RangeValidator ID="RangeValidator1" runat="server" ErrorMessage="RangeValidator" MaximumValue="10" MinimumValue="1" Type="Integer" ControlToValidate="TxtValue">Valeur entre 1 et 10 requise !</asp:RangeValidator>

1.5.3.

CompareValidator

Il utilise un oprateur pour comparer les valeurs en prsence et valider leur concordance. La situation la plus courante d'utilisation est, bien entendu, lors d'une deuxime saisie d'un mot de passe. Les proprits restent aussi dans les mmes normes. Par contre, vous pouvez avoir plusieurs types de validation : Comparaison un type. <asp:CompareValidator runat="server" ID="CompareValidator1" ControlToValidate="TxtValeur" Type="Integer" Operator="DataTypeCheck" ErrorMessage="Doit tre un chiffre entier de type integer !"</asp:CompareValidator> Comparaison une valeur. <asp:CompareValidator runat="server" ID="CompareValidator1" ControlToValidate="TxtValeur" Type="Integer" Operator="GreaterThan" ValueToCompare="0" ErrorMessage="Un chiffre positif est requis !"</asp:CompareValidator> Comparaison un autre champ. <asp:CompareValidator runat="server" ID="CompareValidator1" ControlToValidate="TxtMotPasse2" Type="String" Operator="Equal" ControlToCompare="TxtMotPasse1" ErrorMessage="Les mots de passe ne correspondent pas !"</asp:CompareValidator>

1.5.4.

RegularExpressionValidator

Ce contrle valide un champ suivant une expression rgulire. Il convient pour des tests de validation trs complexes mais demande beaucoup de ressources donc, ne l'utilisez pas pour des validations qui peuvent se faire aisment avec plusieurs autres contrles de validation. Il utilise les mmes proprits que les contrles prcdents avec en plus une

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 46 - 105

Dvelopper des composants serveur


proprit ValidationExpression qui correspond videmment l'expression rgulire de test. Un petit exemple de validation d'un numro de compte bancaire pour en voir l'application : <asp:Label ID="Label1" runat="server" Text="Entrer votre numro de compte :"</asp:Label> <td><asp:TextBox ID="TxtCptBancaire" runat="server"></asp:TextBox> <td><asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="RegularExpressionValidator" ControlToValidate="TxtCptBancaire" ValidationExpression="^\d{3}-\d{7}-\d{2}">Format incorrect </asp:RegularExpressionValidator>

Caractre dexpression rgulire : a : la lettre a doit tre utilise en minuscule. 1 :le chiffre 1 doit tre utilis ?: 0 ou 1 lment *:de 0 a n lments + :de 1 a n lments. [0-n] :valeur entire,comprise entre 0 et n {n} :la longueur doit tre de n caractres. \ :le caractre suivant est un caractre de commande. \w : doit contenir un caractre. \d : doit contenir un chiffre. \. :doit contenir un point ([-+.]\w)* :peut contenir un ou plusieurs traits dunion ou un point et une chaine qui contient un caractre au moins.
Exemple : ValidationExpression = " \w+@\w+\.\w+" \w+ : une chaine qui contient un caractere au minimum. @ :un signe @ \w+ : une chaine qui contient un caractere au minimum. \. : un point \w+ : une chaine qui contient un caractere au minimum.

1.5.5.

CustomValidator

L'utilisateur dfinit lui-mme une fonction pour effectuer la validation lorsque les contrles standards ne peuvent pas assumer ce rle. Dans ce cas, les proprits sont un peu diffrentes : Dans le cas d'une validation ct client :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 47 - 105

Dvelopper des composants serveur


La proprit ClientValidationFunction contient le nom de la fonction La fonction doit tre sous la forme : Function ValidationPersonnelle (source, arguments) la source est l'objet CustomValidator ct client arguments est un objet comportant deux proprits : Value et IsValid La proprit Value est la valeur valider La proprit IsValid est un boolen retournant le rsultat de la validation La validation ct client s'effectue avec du code javascript soit entre les balises ad hoc, soit dans un fichier ".js" spar. Ce genre de code est bien connu des dveloppeurs javascript : <script language="javascript"> function Validation (obj, args) { } </script> Dans le cas d'une validation ct serveur : Placez le code de validation dans l'vnement OnServerValidate

1.5.6.

ValidationSummary

Ce contrle n'est pas un contrle de validation proprement parler, il sert afficher sous diffrentes formes le rsultat de tous les contrles de validation sur la page aspx si une erreur est survenue. Il est bien vident que vous pouvez l'omettre et grer vous-mme un affichage d'erreur. Le contrle ValidationSummary s'affiche ds que la proprit IsValid de la page est False. Il interroge les diffrents contrles non valides et rcupre la valeur de leur proprit ErrorMessage. Pour afficher le rsultat, vous avez les DisplayMode suivants votre disposition :

List : simple liste BulletList : liste avec puces SingleParagraph : les messages d'erreur sont concatns les uns la suite des autres, spars par une virgule L'emplacement de l'affichage peut s'effectuer de deux manires :

l'emplacement du contrle ValidationSummary : mettre sa proprit ShowSummary = True dans une boite de dialogue : mettre sa proprit ShowDialog = True Il est aussi intressant de s'arrter un peu la proprit ValidationGroup des contrles utilisateurs. En effet, regrouper certains contrles sous un mme nom dans la proprit ValidationGroup permet de valider d'abord une srie de champs puis une autre suivant le rsultat de la premire validation.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 48 - 105

Dvelopper des composants serveur

2.Laccs aux donnes avec ASP.NET


2.1. Introduction
Les applications Web accdent souvent des sources de donnes aux fins de stockage et de rcupration de donnes dynamiques. Vous pouvez crire du code pour accder aux donnes l'aide de classes de l'espace de Synoms System.Data (connu sous le nom ADO.NET) et de l'espace de noms stem.Xml. Il s'agissait de l'approche gnralement adopte dans les versions antrieures d'ASP.NET. Toutefois, ASP.NET permet galement d'excuter la liaison de donnes de faon dclarative. Cette liaison n'exige aucun code pour les scnarios de donnes les plus courants, et notamment : la slection et l'affichage de donnes ; le tri, la pagination et la mise en cache de donnes ; la mise jour, l'insertion et la suppression de donnes ; le filtrage de donnes l'aide de paramtres d'excution ; la cration de scnarios matre/dtails l'aide de paramtres.

ASP.NET inclut deux types de contrles serveur qui interviennent dans le modle de liaison de donnes dclaratif : les contrles de source de donnes et les contrles lis aux donnes. Ces contrles grent les tches sous-jacentes exiges par le modle Web sans tat pour l'affichage et la mise jour des donnes dans les pages Web ASP.NET. En consquence, vous n'tes pas tenu de connatre tout le droulement du cycle de vie des demandes de page pour excuter la liaison de donnes.

2.2.

Contrles de source de donnes

Les contrles de source de donnes sont des contrles ASP.NET qui grent les tches de connexion une source de donnes et de lecture et d'criture de donnes. Les contrles de source de donnes ne gnrent pas le rendu d'une interface utilisateur. Au lieu de cela, ils jouent le rle d'intermdiaires entre un magasin de donnes particulier (base de donnes, objet mtier ou fichier XML) et d'autres contrles de la page Web ASP.NET. Les contrles de source de donnes offrent des fonctionnalits Document Millsime Page OFPPT @ C-A-001.doc mars 09 49 - 105

Dvelopper des composants serveur puissantes de rcupration et de modification de donnes, et notamment en termes de requtes, de tri, de pagination, de filtrage, de mise jour, de suppression et d'insertion. ASP.NET comprend les contrles de source de donnes suivants :

Contrle donnes

de

source

de Description Permet d'utiliser un objet mtier ou une autre classe et de crer des applications Web qui s'appuient sur des objets de couche intermdiaire pour grer des donnes. Permet d'utiliser les fournisseurs de donnes manags ADO.NET, lesquels offrent un accs aux bases de donnes Microsoft SQL Server, OLE DB, ODBC ou Oracle. Permet d'utiliser une base de donnes Microsoft Access. Permet d'utiliser un fichier XML, ce qui est trs utile pour les contrles serveur ASP.NET hirarchiques tels que les contrles TreeView ou Menu. Utilis avec la navigation de site ASP.NET.

ObjectDataSource

SqlDataSource

AccessDataSource XmlDataSource

SiteMapDataSource

Les contrles de source de donnes peuvent galement tre tendus pour prendre en charge d'autres fournisseurs d'accs au stockage des donnes.

2.3.

Contrles lis aux donnes

Les contrles lis aux donnes gnrent le rendu des donnes en tant que balises au navigateur qui envoie la demande. Un contrle li aux donnes peut se lier un contrle de source de donnes et extraire automatiquement des donnes au moment opportun dans le cycle de vie de la demande de page. Les contrles lis aux donnes peuvent tirer parti des fonctionnalits fournies par un contrle de source de donnes, et notamment le tri, la pagination, la mise en cache, le filtrage, la mise jour, la suppression et l'insertion. Un contrle li aux donnes se connecte un contrle de source de donnes via sa proprit DataSourceID. ASP.NET comprend les contrles lis aux donnes dcrits dans le tableau suivant.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 50 - 105

Dvelopper des composants serveur

Contrles de liste
Gnre le rendu des donnes dans divers formats de liste. Les contrles de type liste incluent les contrles BulletedList, CheckBoxList, DropDownList, ListBox et
RadioButtonList. Contrle AdRotator fonctionnement Gnre le rendu des annonces dans une page en tant qu'images sur lesquelles les utilisateurs peuvent cliquer pour accder une URL associe l'annonce. Datalist Gnre le rendu des donnes dans une table. Le rendu de chaque lment est gnr l'aide d'un modle d'lment que vous dfinissez. DetailsView Affiche un seul enregistrement la fois sous une forme tabulaire et permet de modifier, de supprimer et d'insrer des enregistrements. Vous pouvez galement parcourir plusieurs enregistrements. Document
C-A-001.doc

OFPPT @

Millsime
mars 09

Page 51 - 105

Dvelopper des composants serveur FormView Semblable au contrle DetailsView, mais permet de dfinir une prsentation de formulaire libre pour chaque enregistrement. Le contrle FormView ressemble au contrle DataList pour un enregistrement unique. GridView Affiche des donnes dans un tableau et propose une assistance pour l'dition, la mise jour, le tri et la Menu Repeater pagination des donnes sans ncessiter de code. Gnre le rendu des donnes dans un menu dynamique hirarchique qui peut inclure des sous-menus. Gnre le rendu des donnes dans une liste. Le rendu de chaque lment est gnr l'aide d'un modle d'lment TreeView que vous dfinissez. Gnre le rendu des donnes dans une arborescence hirarchique de nuds qu'il est possible de dvelopper.

3.Master Page
3.1. Introduction aux MasterPages
Depuis longtemps, les dveloppeurs ont toujours t contraint de dupliquer les sources HTML du design sur chaque page. Dautre solution intermdiaire existait, par exemple lutilisation des frames en HTML, cependant cette fonction appartient au langage HTML et prsente beaucoup de problme, notamment au niveau des emplacements, de plus les frames sont de moins en moins utilises de nos jours. La fonctionnalit MasterPage a longtemps t demande par les dveloppeurs, elle nexistait toujours pas dans les versions prcdentes de lASP.NET, grce au MasterPage vous allez enfin pouvoir sparer les sources du design au code pur. En effet, intgr la version 2.0, vous pouvez sparer la partie dveloppement du design et dveloppement fonctionnel du site, vous navez plus besoin de dployer les sources du design sur chaque page du site. La MasterPage (extension *.master) contiendra la source (X)HTML du design et des zones ddition (contentPlaceHolder), permettant ainsi de crer plusieurs page (contentPage) du mme design. Il suffit ensuite de modifier les zones dditions sur chaque page. Par exemple, si lon considre que le site de SUPINFO (www.supinfo.com) est en ASP.NET 2.0,

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 52 - 105

Dvelopper des composants serveur une MasterPage est suffisante pour le design, ensuite chaque page fera appel cette MasterPage dans len-tte, et chaque page devra insrer leurs informations spcifiques dans les zones dditions imposer dans la MasterPage

3.2. Cration d'une MasterPage


Pour crer une MasterPage, faites un clique-droit sur le nom votre WebSite, puis sur Add a New Item .

Fig 1.1 Crer un nouvel item

Une fentre apparatra, il vous suffira de choisir MasterPage et de renommer, si vous le souhaitez, le nom de la MasterPage.

Fig 1.2 Crer un item MasterPage

Vous remarquerez que len-tte de la MasterPage contient le mot-cl Master , la diffrence dune page simple qui contient le mot-cl Page .

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 53 - 105

Dvelopper des composants serveur


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

Il suffit ensuite dinsrer des zones dditions (contentPlaceHolder) aux endroits souhaiter grce aux balise asp:contentPlaceHolder. Voici un exemple simple de design avec 3 contentPlaceHolder :
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Test</title> <style type="text/css"> body { font-size:14px; font-family:verdana; font-weight:bold; text-align:center; } </style> </head> <body> <form id="form1" runat="server"> <table cellpadding="0" cellspacing="0" border="1" style="width:600px; height:400px"> <tr> <td colspan="2" style="height: 50px"> <asp:ContentPlaceHolder ID="top" runat="server"></asp:ContentPlaceHolder> </td> </tr> <tr> <td style="width: 99px; height: 350px"> <asp:ContentPlaceHolder ID="bottom_left" runat="server"></asp:ContentPlaceHolder> </td> <td style="width: 500px; height: 350px"> <asp:ContentPlaceHolder ID="bottom_right" runat="server"></asp:ContentPlaceHolder> </td> </tr> </table> </form> </body> </html>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 54 - 105

Dvelopper des composants serveur

Fig 1.3 Exemple d'une MasterPage

Attention ne rien rajouter dans les balises contentPlaceHolder si vous souhaitez diter completement la zone. Par exemple si lon rajoute une image dans la zone top de la MasterPage (exemple ci-dessus), cette image apparatra sur toutes les pages faisant appel cette MasterPage.

3.3. Mise en place d'une MasterPage


Pour appliquer une MasterPage sur une nouvelle page, il faut tout dabord enlever toute la source HTML qui vous ne sera pas utile, laisser uniquement len-tte :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

Rajouter ensuite le paramtre MasterPageFile avec lURL de la MasterPage appliquer. Document


C-A-001.doc

OFPPT @

Millsime
mars 09

Page 55 - 105

Dvelopper des composants serveur


<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" Inherits="_Default" %> AutoEventWireup="true" CodeFile="Default.aspx.cs"

Enfin, il suffit de rajouter des balises contentPlaceHolder avec lID dun contentPlaceHolder de la MasterPage, en voici un exemple :
<asp:Content ContentPlaceHolderID="top" runat="server"> TOP: HELLO, HOW ARE YOU? </asp:Content> <asp:Content ContentPlaceHolderID="bottom_left" runat="server"> BOTTOM LEFT: SUPINFO </asp:Content> <asp:Content ContentPlaceHolderID="bottom_right" runat="server"> BOTTOM RIGHT: 2005-2006 </asp:Content>

Voici le rsultat de notre exemple :

Fig 1.4 Exemple d'une page avec MasterPage Les IDs des contentPlaceHolder sont uniques et laffichage des IDs disponiblent lors de lauto-compltion correspondent aux IDs des contentPlaceHolder de la MasterPage appelle.

3.4. Conclusion
Ainsi cette nouvelle fonctionnalit facilite la tche du dveloppeur en sparant le design du code, mais allge aussi larchitecture de lapplication WEB. Grce au MasterPage en ASP.NET 2.0, vous naurez plus besoin de

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 56 - 105

Dvelopper des composants serveur dupliquer le code source du design sur chaque page. Il est bien entendu possible de crer des MasterPage dynamiquement dans le code-behind, de crer dimbriquer des MasterPage.

4.Thmes ( apparences(Skins) et feuilles Css)


4.1. Introduction aux thmes
Les MasterPages facilitant la mise en place et la duplication du design sur toutes les pages dune application WEB. Il manque cependant le formatage du site : les couleurs les polices la taille des tableaux la taille des diffrents composants etc.

Cest l quinterviennent les thmes, plus exactement la mise en place dun style sur un site. Avant ce sont des CSS (Cascading Style Sheet),mais ils ne permettent pas le formatage des contrles ASP.NET.

4.2. Cration d'un thme


Les thmes sont stocks obligatoirement dans le dossier App_Themes( crer)compos au minimum dun fichier Skin (*.skin),sinon de plusieurs fichier skin et Css.(bouton droit sur le projet /Ajouter le dossier ASP.NET/Thmes) Ajouter ensuite un nouveau fichier Skin ou CSS votre thme, il suffit tout simplement de faire un clique-droit sur le thme et Add New Item .

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 57 - 105

Dvelopper des composants serveur

4.3. Les fichiers Skins


Les fichiers Skins sont composs essentiellement de contrle ASP.NET avec leurs proprits de formatage (police, couleur, taille). Vous avez la possibilit dajouter : des contrles communs (sans SkinID) des contrles spcifiques (avec SkinID).

Si le thme est appliqu :

les contrles communs sappliqueront tous les contrles du mme type. les contrles spcifiques seront appliqus tous les contrles du mme type et ayant le mme SkinID.

Exemple dun contrle commun de type TextBox :


<asp:TextBox runat="server" Font-Size="10px" Font-Names="Verdana" ForeColor="red" />

Si le thme est appliqu sur tout le site, toutes les TextBox auront le mme style. Exemple dun contrle spcifique de type TextBox :
<asp:TextBox runat="server" SkinID="specifique" Font-Size="10px" Font-Names="Verdana" ForeColor="red" />

Si le thme est appliqu sur tout le site, toutes les TextBox ayant comme SkinID specifique auront le mme style

Pour crer une apparence, une mthode facile consiste ajouter le contrle une page et le configurer comme il vous convient. Par exemple, vous pouvez ajouter un contrle Calendar une page et dfinir son en-tte des jours, la date slectionne et d'autres proprits. Ensuite, vous pouvez copier la dfinition du contrle de la page en mode source dans un fichier .skin, mais vous devez supprimer l'attribut ID.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 58 - 105

Dvelopper des composants serveur Voici un exemple de fichier Skin non exhaustif :

<asp:TextBox runat="server" ForeColor="#000000" font-name="Verdana" Font-Size="9px" height="13px" borderWidth="1px" borderStyle="Solid" BorderColor="#82ACFF" BackColor="#FFFFFF" font-bold="false" /> <asp:DropDownList runat="server" Font-Name="Verdana" Font-Size="10px" ForeColor="#000000" Font-Bold="false" borderWidth="1px" borderStyle="Solid" BorderColor="#82ACFF" BackColor="#FFFFFF" /> <asp:ListBox Runat="Server" Font-Size="10pt" BackColor="#FFFBFF" ForeColor="gray"/> Font-Name="Verdana"

<asp:GridView Runat="Server" SkinId="test" CellPadding="1" BorderStyle="solid" BorderWidth="1px" BackColor="whitesmoke" ForeColor="#93B41A" HeaderStyle-Font-Names="Verdana" HeaderStyle-Font-Size="10px" HeaderStyle-ForeColor="gray" HeaderStyle-BackColor="white" HeaderStyle-Font-Bold="true" RowStyle-Font-Names="Verdana" RowStyle-Font-Size="10pt" RowStyle-ForeColor="#93B41A" RowStyle-BackColor="whitesmoke" AlternatingRowStyle-BackColor="white" AlternatingRowStyle-ForeColor="#93B41A" /> <asp:Label runat="server" SkinID="LabelWhite" ForeColor="white" font-name="Verdana" Font-size="10pt" /> <asp:Label runat="server" SkinID="LabelUnderline" ForeColor="Gray" font-name="Verdana" Font-size="10pt" Font-Underline="true" /> <asp:FileUpload runat="server" ForeColor="Gray"

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 59 - 105

Dvelopper des composants serveur


font-name="Verdana" Font-Size="10pt" borderWidth="1px" BorderColor="#CCCCCC" BackColor="#FFFBFF" /> <asp:Button runat="server" BackColor="#FFFBFF" BorderColor="#CCCCCC" BorderStyle="solid" BorderWidth="1px" Font-name="Verdana" Font-size="8pt" ForeColor="Darkgray" /> <asp:RadioButtonList runat="server" Font-Name="Verdana" Font-Size="11px" ForeColor="gray" /> <asp:CheckBox runat="server" BackColor="#FFFBFF" Font-Name="Verdana" Font-Size="11px" ForeColor="gray" /> <asp:RequiredFieldValidator runat="server" Font-Name="Verdana" Font-Size="11px" ForeColor="red" /> <asp:CompareValidator runat="server" Font-Name="Verdana" Font-Size="11px" ForeColor="red" />

Il es tout fait possible de crer plusieurs fichiers Skins dans un mme thme, cependant les contrles ayant un SkinID doivent tre unique dans un thme, sinon vous ne pourrez pas compiler votre application WEB.

4.4. Les fichiers CSS


Pour crer une feuille de style click droit sur le dossier App_themes/Theme1 ,ajouter un nouvel element choisir feuille de style donner un nom la feuille de style. La feuille est vide pour ajouter des elememts et des classes de style,double click sur la feuille. Un menu structure Css apparat a gauche :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 60 - 105

Dvelopper des composants serveur

Click droit sur Elements ,Ajouter une regle de style :

Choisir lelement pour lequel on veut crer un style :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 61 - 105

Dvelopper des composants serveur

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 62 - 105

Dvelopper des composants serveur

Faire la mme chose pour ajouter une classe.

4.5. Application d'un thme


Un style peut tre directement appliqu au contrle ASP.NET en modifiant directement les proprits dun contrle. Bien entendu, lintrt des Thmes est de pouvoir stocker diffrents thmes et pouvoir les appliquer plusieurs fois sans avoir redfinir le thme. Voici les principaux proprits de style des contrles : Proprits BackColor BorderColor BorderStyle BorderWidth Font-Bold Font-Italic Font-Name Font-Overline Font-Size Font-Strikeout Font-Underline Type Texte Texte Texte Pixels Booleen Booleen Texte Booleen Pixels Booleen Booleen Document
C-A-001.doc

Description Couleur de larrire plan Couleur de la bordure Style de la bordure Largeur de la bordure Caractre en gras Caractre en italique Police Caractre surlign Taille des caractres Caractre barr Caractre souglin Millsime
mars 09

OFPPT @

Page 63 - 105

Dvelopper des composants serveur ForeColor Texte Height Pixels Visible Booleen Width Pixels

Couleur des caractres Hauteur du contrle Visibilit du contrle Largeur du contrle

Pour appliqer un thme automatiquement, il suffit de spcifier le nom du thme dans len-tte de la page.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> Theme="theme1"

Enfin, il faudra spcifier dans chaque contrle le SkinID si vous souhaitez appliquer des styles spcifiques ayant un SkinID.

Sans thme

Avec thme

4.6. Appliquer un thme global


Pour appliquer un thme tout le site, pour viter dappliquer le thme page par page, il faut dfinir le thme appliquer dans le fichier de configuration (Web.config) entre les balises system.web , en voici un exemple :
<?xml version="1.0"?> <configuration> <appSettings/> <connectionStrings/> <system.web> <compilation debug="true"/> <authentication mode="Windows"/>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 64 - 105

Dvelopper des composants serveur


<pages theme="test"/> </system.web> </configuration>

Dans ce cas, vous naurez pas spcifier la proprit Theme sur chaque en-tte de chaque page. Par contre si votre thme contient des contrles avec SkinID, il faudra les spcifier dans toutes vos pages.

4.7. Dsactiver un thme


Les thmes appliqus sont prioritaires, ce qui nest pas pratique si lon souhaite appliquer un style spcifier un et un seul contrle. Dans ce cas vous avez la possibilit dutilis la proprit EnableTheming (booleen) disponible pour un contrle ou une page.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" EnableTheming="false" Inherits="test " %>

Les thmes sont dsactivs sur la page test.aspx.


<asp:TextBox ID="TextBox1" ForeColor="red" runat="server"></asp:TextBox> EnableTheming="false"

La TextBox naura pas de thme appliqu, seul les proprits de style dfinit dans le contrle sera valable.

5. Profiles
5.1. Introduction aux Profiles
Plusieurs faons de stocker les informations des utilisateurs : Les sessions, les cookies

ASP.NET intgre une nouvelle solution, les Profiles, se basant sur une base de donne (SQL Server, Access, Oracle) et permet de stocker des informations permanentes et automatiquement. La fonctionnalit de profil ASP.NET vous permet de stocker des valeurs simples (scalaires), des collections et d'autres types complexes, ainsi que des types dfinis par l'utilisateur.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 65 - 105

Dvelopper des composants serveur

5.2. Implmentation des Profiles


Microsoft met disposition un excutable permettant dinstaller les Profiles (de mme pour lutilisation des Membership et Roles) dans une base de donne. Cette excutable se trouve dans le chemin suivant : C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_reg sql.exe Il vous suffit de lancer le programme, choisir si vous voulez crer une nouvelle base (ASPNETDB sera le nom de la base par dfaut) ou installer tous les composants dans une base existante.

Fig 4.1 Installation aspnet_regsql.exe

Voici les nouvelles tables installes :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 66 - 105

Dvelopper des composants serveur

Fig 4.2 Tables installes

Et les procdures stockes concernant les Profiles :

Fig 4.3 Procdures pour les Profiles

5.3. Description des tables et procdures


Lutilisation des Profiles ncessite une base de donne stockant les informations grce des procdures stockes. Quelque soit la procdure dinstallation des Profiles, vous tomberez sur le mme schma de base de donne. Table
aspnet_Applications

Description
Informations concernant toutes les application WEB disponibles Informations concernant tous les utilisateurs (status de connexion, dernire connexion). Reli un ou plusieurs Profile et une application. Informations concernent les Profiles de plusieurs utilisateurs avec la dernire date de modification

aspnet_Users

Aspnet_Profile

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 67 - 105

Dvelopper des composants serveur

Fig 4.4 Structure des tables Profiles

Procdures
aspnet_Profile_DeleteInactiveProfiles aspnet_Profile_DeleteProfiles aspnet_Profile_GetNumberOfInactiveProfiles

Description
Supprime les profiles inactifs selon une dure spcifier Supprime les Profiles selon les utilisateurs Rcupre le nombre de Profiles inactifs depuis un certain temps ( spcifier) Permet de rcuperer des informations sur les Profiles, tel que le propritaire utilisateur, la dernire date de modification Permet de rcuperer le contenu dun Profile selon le nom de lutilisateur Permet de modifier un Profile selon lutilisateur

aspnet_Profile_GetProfiles

aspnet_Profile_GetProperties aspnet_Profile_SetProperties

5.4. Mise en place des Profiles


Les Profiles se dfinissent dans le fichier de configuration de lapplication WEB, le fichier XML web.config, entre les balises system.web.
<?xml version="1.0"?> <configuration> <appSettings/> <connectionStrings/> <system.web> <compilation debug="true"/> <authentication mode="Windows"/> <profile defaultProvider=""> <providers>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 68 - 105

Dvelopper des composants serveur


... </providers> <properties> <add ... /> </properties> </profile> </system.web> </configuration>

Lutilisation des Profiles est associe un Provider (Profile Provider), donc une base de donne. En loccurrence, vous avez la possibilit de choisir un Provider par dfaut, c'est--dire le Provider dfinit dans le champs ConnectionString du fichier web.config, ou de dfinir vous-mme le provider entre les balises Provider. La balise Properties permet de dfinir les informations qui seront stockes dans la base de donne, voici les proprits de la balise Add:
Proprits Name allowAnonymous Type Provider serializeAs readOnly DefaultValue Group Description Nom de la proprit, auquel on pourra accder dans le code-behind Booleen, autoris lutilisation de cette proprit pour les utilisateurs avec un Profile anonyme Le type de la proprit (String, Integer, ) Le Provider associ Le type de serialisation (String, Binary, ) Proprit en mode lecture uniquement La valeur par dfaut de la proprit Ordonner les proprits par groupe

Voici un exemple de Profile : Donnees simples :


<system.web> <anonymousIdentification enabled="true" /> <profile enabled="true" defaultProvider="AspNetSqlProfileProvider"> <properties> <add name="PostalCode" type="System.String" allowAnonymous="true" /> </properties> </profile> </system.web>

Donnes personnalises (classes) :


<profile enabled="true " defaultProvider="AspNetSqlProfileProvider"> <providers> <add name="AspNetSqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="xxx"> </add>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 69 - 105

Dvelopper des composants serveur


</providers> <properties> <add name="panier" allowAnonymous="true" type="Cart" provider="AspNetSqlProvider" serializeAs="Binary"/> <add name="destinataire" allowAnonymous="true" type="Destinataire" provider="AspNetSqlProvider" serializeAs="Binary"/> </properties> </profile>

Dans cet exemple, les type Cart et Destinataire sont des classes. On peut dfinir notre propre chane de connexion : 1. ajouter un objet SqlSDataSource sur la page aspx 2. le configurer avec la base de donnes que vous avez crer avec loutil aspnet_regsql.exe 3. le code suivant donne la chane de connexion :
<connectionStrings> <add name="ProfilsConnectionString" connectionString="Data Source=AZZI\sqlexpress;Initial Catalog=Profils;Integrated Security=True"

providerName="System.Data.SqlClient" /> </connectionStrings>

4.dans la propriete connectionStringName on met le nom de la chaine de connexion quon vient de crer. <system.web> <anonymousIdentification enabled="true " /> <profile enabled="true " defaultProvider="AspNetSqlProfileProvider"> <providers > <add name="AspNetSqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ProfilsConnectionString"/>

</providers>

5.5. Ajouter / Modifier les proprits


Une fois les proprits des Profiles misent en place dans le fichier web.config, vous allez pouvoir stocker des donnes dans un Profile. Attention, si vous souhaitez stocker des informations dans un Profile anonyme, il faut activer les utilisateurs anonyme dans le fichier web.config. <anonymousIdentification enabled="true"/> Laccs au proprit du profile en code-behind se fait de cette manire : Document Millsime Page OFPPT @ C-A-001.doc mars 09 70 - 105

Dvelopper des composants serveur


Profile.[propriete] = [valeur]

Voici un exemple : Le fichier web.config :


<?xml version="1.0"?> <configuration> <appSettings/> <connectionStrings> <add name="testConnectionString" connectionString="Data Source=JUN\SQLExpress;Initial Catalog=test;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> <system.web> <compilation debug="true"/> <authentication mode="Windows"/> <pages theme="test"/> <anonymousIdentification enabled="true"/> <profile enabled="true"> <providers> <add name="AspNetSqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="testConnectionString"></add> </providers> <properties> <add name="age" allowAnonymous="true" type="Integer" provider="AspNetSqlProvider" serializeAs="String" /> </properties> </profile> </system.web> </configuration>

Le fichier test.aspx :
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> Age&nbsp;<asp:TextBox ID="TxtBox_Age" runat="server"></asp:TextBox> <br /> <asp:Button ID="Button_validate" runat="server" Text="Valider" OnClick="Button_valide_Click" /><br /> <br /> </div> </form> </body> </html>

Le fichier test.aspx.vb :

public partial class test

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 71 - 105

Dvelopper des composants serveur


protected Page_Load(object sender, EventArgs e) Label_Age.Text= Profile.age Protected Button_valide_Click(object sender, EventArgs e) Profile.age = CInt(TxtBox_Age.Text)

Fig 4.5 Exemple stockage information Le contenu de la table aspnet_Profile avant validation :

Fig 4.6 Tables aspnet_Profile avant validation

Le contenu de la table aspnet_Profile aprs validation :

Fig 4.7 Tables aspnet_Profile aprs validation

Pour rcuprer cette donne, il suffit de la rcuprer dans un Label ou autre contrle avec ce bout de code :
= Profile.age;

5.6. Les groupes de proprits


Les groupes de proprits permettent de regrouper les proprits stocker dans la base de donne selon leur fonction ou type, permettant dordonner le Profile si celui-ci est compos dune multitude de proprits. Cela permet aussi davoir le mme nom de proprit dans chaque groupe puisque par dfaut, une proprit est unique ou par groupe. Voici un exemple de Profile group :
<profile enabled="true"> <providers> <add name="AspNetSqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="testConnectionString"></add> </providers> <properties> <group name="Students"> <add name="Campus_ID" /> <add name="Nom" />

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 72 - 105

Dvelopper des composants serveur


<add name="Prnom" /> <add name="Rgion" /> <add name="Promo" /> <add name="Pole" /> </group> </properties> </profile>

Pour accder aux proprits, il suffit de spcifier le groupe, par exemple :


= Profile.Students.Nom;

5.7. Conclusion
Cette nouvelle fonctionnalit permet ainsi de stocker automatiquement et permanant des informations dans une base de donne. Bien entendu, les dveloppeurs prfreront dvelopper eux-mmes le stockage dinformation temporaire ou long terme, cependant la solution des Profiles de Microsoft permet une implmentation simple et rapide. Si vous souhaitez migrer un Profile Anonyme vers un Profile Connect (par exemple pour un panier) il faut crer un fichier Global.asax comme cet exemple :
<%@ Application Language="C#" %> <script runat="server"> void Profile_MigrateAnonymous(Object ProfileMigrateEventArgs pe) { // vous ajoutez toutes les proprits migrer sender,

Profile.panier = Profile.GetProfile(pe.AnonymousID).panier; Profile.destinataire = Profile.GetProfile(pe.AnonymousID).destinataire; // on supprimer le profile anonyme AnonymousIdentificationModule.ClearAnonymousIdentifier(); } </script>

6.Scurit en ASP.NET 2.0


6.1. Introduction
Chaque site Internet ncessite une certaine scurit pour viter tout problmes. En effet, l'ASP.NET 2.0 est un nouveau langage de Web dveloppement pouvant tre qualifi de "Nouvelle gnration".

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 73 - 105

Dvelopper des composants serveur Grce ce langage, nous allons pouvoir appliquer des autorisations d'accs certaines pages/dossiers. L'ASP.NET 2.0 a t dvelopp de telle sorte qu'il facilite la tche au dveloppeur, en rduisant son temps de travail de 80%.

6.2.

Le fichier de configuration: Web.config

Le fichier Web.config est un fichier XML permettant de grer la configuration de votre Website ou application. Il se trouve en gnral la racine du site et chaque sous dossiers peuvent contenir un fichier de configuration. Ce fichier permet de grer plusieurs paramtres d'un site web, notamment les accs, les autorisations, les sessions, les mails, les erreurs ainsi que leur redirections etc... Voici l'exemple d'un fichier web.config:
<?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/ v2.0"> <appSettings/> <connectionStrings> <add name="xxxxxxx" connectionString="Data Source= xxxxxxx;Initial Catalog= xxxxxxx;Integrated Security=True" providerName="System.Data.SqlClient"/> </connectionStrings> <system.web> <machineKey validationKey='EB5219CAB5504274A423EB78718F3E56DC8848 AFA6025B6D740D46AA2394EBAD1BB9FE6BD9141A691A971 7CFEDC77FB2788BBBC2CD80CA6C3EE02ACF99B04BA5' decryptionKey='685F5FA7DD04AEE2A3C203A55612D6 A1A366F37491BED4B5' validation='SHA1'/> <membership defaultProvider="MembershipSqlProvider"> <providers> <add name="MembershipSqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName=" xxxxxxx " enablePasswordRetrieval="true" passwordFormat="Encrypted" applicationName=" xxxxxxx "> </add> </providers> </membership> <roleManager enabled="true" defaultProvider="RoleManagerSqlProvider"> <providers> <add connectionStringName=" xxxxxxx applicationName=" xxxxxxx "

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 74 - 105

Dvelopper des composants serveur


name="RoleManagerSqlProvider" type="System.Web.Security.SqlRoleProvi der" /> </providers> </roleManager>

<profile enabled="true"> <providers> <add name="AspNetSqlProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName=" xxxxxxx "> </add> </providers> <properties> <add name="Cart" allowAnonymous="true" type="W2TM.Web.framework.Cart" provider="AspNetSqlProvider" serializeAs="Binary"/> </properties> </profile> <anonymousIdentification enabled="true" cookieName="ASPXANONYMOUS" cookieTimeout="20" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All" cookieless="UseCookies"> </anonymousIdentification> <sessionState cookieless="UseCookies" mode="InProc"></sessionState> <compilation debug="true"/> <customErrors mode="Off" defaultRedirect="~/erreur.aspx"/> <authentication mode="Forms"> <forms defaultUrl="default.aspx" loginUrl="login.aspx" requireSSL="false" protection="All"> </forms> </authentication> <authorization> <deny users="*" /> </authorization> </system.web> <location path="admin"> <system.web> <authorization> <allow roles="admin"/> </authorization> </system.web> </location> <location path="erreur.aspx"> <system.web>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 75 - 105

Dvelopper des composants serveur


<authorization> <allow users="*"/> </authorization> </system.web> </location> <location path="Default.aspx"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> <location path="uploads"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location> <location path="master"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> <location path="fr"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> <location path="en"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> <location path="login.aspx"> <system.web> <authorization> <allow users="?"/> </authorization> </system.web> </location> <location path="images"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location> <system.net> <mailSettings> <smtp> <network host="localhost" /> </smtp> </mailSettings> </system.net> </configuration>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 76 - 105

Dvelopper des composants serveur

Ce fichier web.config est tir d'un des sites Exemples. Tout au long de cet article vous apprendrez petit petit comment scuriser votre site par ce fichier de configuration XML.

6.3.

Utilisation des Memberships et rles


Installation de la base

6.3.1.

Avant toutes choses, les memberships et rles s'utilisent obligatoirement avec une base de donne (SQL Server, Acces, Oracle). Nous allons uniquement prendre le cas de SQL Server. Pour SQL Server, il vous faut installer la base ASPNETDB (Framework 2.0) qui contient des tables, des procdures stocks, vous permettant d'utiliser les memberships, les rles, les profiles et donc la personnalisation. L'installation se trouve en gnral dans: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50215\aspnet_regsql.exe Il vous suffit de lancer le programme, choisir si vous voulez crer une nouvelle base (ASPNETDB sera le nom de cette base) ou installer tous les composants dans une base existante.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 77 - 105

Dvelopper des composants serveur

6.3.2.

Memberships

A la diffrence des versions prcdentes, l'ASP.NET 2.0 inclut une utilisation simple des memberships et rles, grce l'implmentation des providers, nouveaut dans le .NET Framework 2.0, permettant un accs diffrentes bases, de pouvoir contrler et choisir o stocker des informations dans une base. Il existe diffrents providers possibles pour les memberships: Acces, SQL Server... voici un schma montrant le modle du provider et son fonctionnement:

Pour utiliser les memberships dans votre projet, vous devez obligatoirement modifier le fichier Web.config (ou modifier par l'intermdiaire du WSAT :website assistant tools), en voici un exemple (entre les balises system.web):
<membership defaultProvider="MembershipSqlProvider"> <providers> <add name="MembershipSqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="votre_ConnectionString" enablePasswordRetrieval="true" passwordFormat="Encrypted" applicationName="nom_application"> </add> </providers> </membership>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 78 - 105

Dvelopper des composants serveur Les memberships peuvent s'utiliser dans le code-behind, en utilisant la classe membership qui est compose de mthodes statiques, ne ncessitant aucune instance de classe. Voici une liste non-exhaustive de mthode: Cration d'un utilisateur (deux manires): Membership.CreateUser(username, password); OU MembershipCreateStatus status; MembershipUser newuser = Membership.CreateUser(stringLogin, stringPassword, stringMail, stringQuestion, stringReponse, true, out status); Supprssion un utilisateur: Membership.DeleteUser(username); Validit d'un utilisateur: Membership.ValidateUser(username, password); Chercher un utilisateur par son mail: Membership.FindUsersByEmail(email); Afficher tous les utilisateurs: Membership.GetAllUsers(); Il vous suffit de taper "Membership" dans le code-behind (*.aspx.cs), vous pourrez apercevoir par auto-compltion toutes les mthodes de cette classe. Bien entendu toutes ces mthodes peuvent tre gnrer automatiquement en utilisant les contrles de Login, qui consiste simplement du Drag and Drop. Voici un exemple simple d'un formulaire d'inscription en utilisant la class membership:
Login: <asp:TextBox ID="TBox_Login" runat="server"></asp:TextBox><br /> Password:<asp:TextBox ID="TBox_Pwd" runat="server"></asp:TextBox><br /> <br /> <asp:Button ID="Bt_Register" runat="server" OnClick="Bt_Register_Click" Text="S'inscrire" /></div> protected sub Bt_Register_Click(object sender, EventArgs e) Membership.CreateUser(TBox_Login.Text, TBox_Pwd.Text) End sub

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 79 - 105

Dvelopper des composants serveur

6.3.3.

Rles

Les rles consistent regrouper les utilisateurs par groupes, par exemples les administrateurs dans le rle "admin", les utilisateurs inscrits dans le rle "user". L'utilit des rles est de pouvoir contrler un grand nombre d'utilisateur par l'intermdiaire d'un nom: le nom du rle. Il vous faut cependant, activer les rles, soit dans le WSAT, soit dans le web.confg comme ci-dessous.
<roleManager enabled="true" defaultProvider="RoleManagerSqlProvider"> <providers> <add connectionStringName="votre_ConnectionString" applicationName="royal_fleur" name="RoleManagerSqlProvider" type="System.Web.Security.SqlRoleProvider" /> </providers> </roleManager>

Comme pour les memberships, ils existent des classes pouvant utiliser les rles, la principale classe est "rles". Voic quelques exemples de mthodes pouvant tre utiliser: Cration d'un rle: Roles.CreateRole(nom); Supprssion d'un rle: Roles.DeleteRole(nom); Ajout d'un utilisateur un rle: Roles.AddUserToRole(username, rolename); Supprssion d'un utilisateur d'un rle: Roles.RemoveUserFromRole(username, rolename); Les rles, ainsi que les memberships, peuvent tre configurer avec le WSAT.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 80 - 105

Dvelopper des composants serveur

6.4.

Les contrles de login

Dans le prcdent chapitre, nous avons vu les diffrentes mthodes possibles pour la classe membership, cependant toutes ces mthodes peuvent tre grer automatiquement par les contrles de login. Tous les templates des contrles ci-dessous sont modifiables, y compris par l'intermdiaire d'un thme ou d'un fichier skin.

6.4.1.

Login

Le Login permet tout simplement un utilisateur de se connecter en indiquant son login et son password, il vous suffit simplement de faire du Drag an Drop, prendre l'objet login et le dposer sur une page.

Vous avez la possibilit de modifier le template, soit en utilisant les templates intgrs au contrle en cliquant sur "Auto Format", soit vous diter vous mme le template en cliquant sur "Convert To Template", cela convertira le contrle en tableau HTML.

6.4.2.

LoginView

Le loginView permet de grer des templates diffrents: - le template pour les utilisateurs anonymes - le template pour les utilisateurs connects

<asp:LoginView ID="LoginView1" runat="server"> <LoggedInTemplate> Bonjour<asp:LoginName ID="LoginName1" runat="server" /> </LoggedInTemplate> <AnonymousTemplate> <asp:Login ID="Login2"

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 81 - 105

Dvelopper des composants serveur


runat="server"></asp:Login> </AnonymousTemplate> </asp:LoginView>

Dans l'exemple ci-dessus, un utilisateur anonyme verrait le contrle Login, alors qu'un utilisateur connect verra "Bonjour [Login]".

6.4.3.

PasswordRecovery

<asp:PasswordRecovery runat="server"> <MailDefinition Subject="sujet"> </MailDefinition> </asp:PasswordRecovery>

ID="PasswordRecovery1" From="votre@mail.fr"

Attention, la configuration mail est obligatoire pour que ce contrle fonctionne, en effet ce contrle envoit un mail l'utilisateur ayant rentrer son pseudo, sa question de scurit ainsi que la rponse de scurit. De plus, il faut configurer le mail dans le fichier de configuration comme cidessous:
<system.net> <mailSettings> <smtp> <network host="localhost" /> </smtp> </mailSettings> </system.net>

Dans le cas ci-dessus, il s'agit d'un serveur SMTP en local.

6.4.4.

LoginStatus

Le LoginStatus est affiche tout simplement un lien "login" si l'utilisateur est anonyme ou un lien "LogOut" si l'utilisateur est connect. (Voir l'exemple ci-dessous).

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 82 - 105

Dvelopper des composants serveur

6.4.5.

LoginName

LoginName, vu dans l'exemple du LoginView, permet de rcuprer le Login de l'utilisateur connect, pratique pour personnaliser un message avec le login pour chaque utilisateur.
<asp:LoginView ID="LoginView1" runat="server"> <AnonymousTemplate> <asp:Login ID="Login1" runat="server" DestinationPageUrl="~/login.aspx"> </asp:Login> <asp:LoginStatus ID="LoginStatus1" LogoutPageUrl="~/default.aspx" runat="server" /> </AnonymousTemplate> <LoggedInTemplate> Bonjour <asp:LoginName ID="LoginName1" runat="server" />! <asp:LoginStatus ID="LoginStatus1" runat="server" /> </LoggedInTemplate> </asp:LoginView>

6.4.6.

CreateUserWizard

Ce contrle permet un utilisateur de s'inscrire en rentrant quelques informations, cela ne ncessite aucune configuration, mis part les memberships dans le web.config.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 83 - 105

Dvelopper des composants serveur

6.4.7.

ChangePassword

Comme le nom l'indique, cela permet tout simplement de changer son password.

6.5.

Les diffrents fournisseurs d'authentification

Le choix des fournisseurs se situe au niveau de la balise "authentification". En voici un exemple:


<authentication mode="Forms"> <forms name=".ASPXUSERAUTH" defaultUrl="default.aspx" loginUrl="login.aspx" requireSSL="false" protection="All"> </forms> </authentication>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 84 - 105

Dvelopper des composants serveur

6.5.1.

Forms

L'authentification par formulaire est la plus rpandue et la plus utilises. Elle consiste en l'utilisation des cookies. Lorsqu'un utilisateur est connect, un cookie est cre chez le client. Ce fournisseur implique souvent l'utilisation des contrles de scurit (login).

6.5.2.

Passport

Le fournisseur passport est spcifique Microsoft, et requiert un compte passport (MSN etc...) qui sont centralis chez Microsoft.

6.5.3.

Windows

Ce fournisseur implique la prsence de IIS sur le serveur, qui effectuera lui mme les authentifications de chaque utilisateur.

6.5.4.

None

Ce fournisseur correspond tout simplement une authentification personnalise, c'est-dire que le dveloppeur devra lui mme le dvelopper, ce qui demanderait un surplus de travail.

6.6.

Appliquer des autorisations Les balises

6.6.1.

Les autorisations permettent de restreindre l 'accs aux utilisateurs certaines partie du site ou dossier. Par exemple interdire l'accs aux anonyme dans l'administration, interdire l'accs aux utilisateurs inscrit un dossir d'image etc... Tout cela se configure par l'intermdiaire du fichier web.config, qui comme vous le voyez est trs utile. Voici la balise mettre entre : <authorization> <deny users="?"/> </< FONT><authorization> - * signifie "tout le monde" - ? signifie "utilisateurs anonyme" - Si cette balise est entre cela s'applique au site entier (projet entier), dans notre cas, personne n'a accs au site. - Pour autoriser, il suffit de remplacer deny par allow. - Pour autoriser un rle, et non un utilisateur, il suffit de remplacer users par roles.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 85 - 105

Dvelopper des composants serveur

6.6.2.

Exemples d'autorisations

Voici une arborescence assez simple:

La meilleur politique d'autorisation est d'interdire, tout d'abord, l'accs au site entier, donc: <authorization> <deny users="*"/> </< FONT><authorization> Ensuite, il faut autoriser un par un les pages/dossiers. Voici les balises insrer (en dehors de system.web!): <location path="default.aspx"> la page default.aspx <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location> <location path="MasterPage.Master"> la Masterpage <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location> <location path="admin"> <system.web> <authorization> <deny users="?"> <allow roles="admin" /> </authorization> </system.web> </location> Le dossier admin

En gnral, il faut mettre en premier les interdictions (deny), puis les autorisations (allow). Document
C-A-001.doc

OFPPT @

Millsime
mars 09

Page 86 - 105

Dvelopper des composants serveur Les autorisations savrent trs utiles et compliqu pour des sites complexes, c'est pourquoi cela demande une arborescence de fichier bien ordonn et rflchi, tablir l'avance les rles, les utilisateurs, les diffrents accs au site. Comme vu ci-dessus, la meilleure politique d'autorisation est de "tout interdire" puis autoriser un par un.

6.7.

WSAT - Web Site Administration Tool

Le WSAT est une interface d'administration simplifi du fichier de configuration, permettant de configurer votre application/ site. Le WSAT est compos de 3 sections: - Security - Application - Provider Vous avez aussi la possiblit de modifier les profiles par l'intermdiaire du WSAT.

6.7.1.

Security

La partie scurit concerne tout ce que l'on a vu jusque l. Grce cette administration, vous pourrez ajouter/modifier/supprimer des utilisateurs, ajouter/modifier/supprimer des rles, ainsi que les autorisations.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 87 - 105

Dvelopper des composants serveur

6.7.2.

Application

Cette partie concerne la configuration de l'application, notamment la configuration mail (smtp), le debug et tracing avec cassini (serveur web inclus) ou IIS.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 88 - 105

Dvelopper des composants serveur

6.7.3.

Provider

Vous avez la possiblit de grer vos providers dans cette partie de l'administration. Bien entendu cela ne permet pas de crer une base de donne. Ici, vous pouvez soit, choisir un provider pour tous les composants, soit un par un, par exemple vous aurez le choix de choisir un provider pour les memberships, roles, profiles. Si vous ajoutez un provider par l'intermdiaire du fichier web.config, cela apparatra dans le WSAT aussi.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 89 - 105

Dvelopper des composants serveur

7.Web Parts
7.1. Introduction aux WebParts
On voit apparatre de plus en plus souvent sur des sites, des portails, un systme de zone de fentrage tel que sur MyMSN, sur Google et Yahoo : ce sont les WebParts. Les WebParts reprsentent une nouvelle organisation et conception dun site WEB dont le principe se base sur un regroupement de contrle dans des zones modifiables dont on peut contrler laspect en reduisant la zone, en fermant la zone, en changeant des contrles dune zone un autre dynamiquement. Cette fonctionnalit se base ainsi sur des zones composs de WebPart (contrle). Les utilisateurs peuvent contrler laffichage dune page, en choisissant les contrles afficher, la position des contrles, de changer lapparence de ces contrles, tout cela dynamiquement. Lutilisation des WebParts est associe aux memberships et la

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 90 - 105

Dvelopper des composants serveur personnalisation qui permet lutilisateur de contrler tous les aspects des WebParts selon les autorisations appliques.

Fig 3.1 MyMSN

7.2. Les diffrentes zones de WebParts


Proprits WebPartZone EditorZone Description Zone par dfault et visible permettant linsertion de WebPart, dplacer et dposer possible entre deux WebPartZone. Zone ddition pour interagir avec

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 91 - 105

Dvelopper des composants serveur


les WebPartZone, compos de WebParts Editor. Zone invisible par dfault Zone contenant les WebParts invisible par dfault, des WebPart que lutilisateur fermer Zone invisible par dfault Zone permettant dditer les liens entre les WebParts. Zone invisible par dfault

CatalogZone

ConnectionsZone

Toutes ces zones sont contrls par un WebPartManager, unique par page.

7.3. Cration des WebParts


Les WebPart et WebPartZone sont contrls par le WebPartManager, il faut donc le dposer sur la page pour pouvoir utiliser les WebParts. Ensuite, il faudra placer des WebPartZones qui en gnral sont placs dans des tableaux HTML (ou div).

Fig 3.2 Exemple cration des WebPartZone (mode design)

Il faut maintenant remplir les WebPartZone par des contrles, par exemple dposer un Label, une TextBox, . Voici un exemple qui servira tout au long de larticle :
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:WebPartManager ID="WebPartManager1" runat="server"> </asp:WebPartManager> <table style="width:400px; border: solid 1px black; vertical-align: middle; text-align:center" border="1" cellpadding="0" cellspacing="0"> <tr> <td style="width:200px"> <asp:WebPartZone ID="Zone_3" runat="server"> <ZoneTemplate> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </ZoneTemplate> </asp:WebPartZone>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 92 - 105

Dvelopper des composants serveur


</td> <td style="width:200px"> <asp:WebPartZone ID="Zone_3" runat="server"> <ZoneTemplate> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> </ZoneTemplate> </asp:WebPartZone> </td> </tr> <tr> <td style="width:200px"> <asp:WebPartZone ID="Zone_3" runat="server"> <ZoneTemplate> <asp:Button ID="Button1" runat="server" Text="Button" /> </ZoneTemplate> </asp:WebPartZone> </td> <td style="width:200px"> <asp:WebPartZone ID="Zone_4" runat="server"> <ZoneTemplate> <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label> </ZoneTemplate> </asp:WebPartZone> </td> </tr> </table> <br /> </form> </body> </html>

Fig 3.3 Exemple de cration de WebParts (mode design)

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 93 - 105

Dvelopper des composants serveur

Fig 3.4 Exemple de cration de WebParts (mode Browser)

Attention, vous devez obligatoirement tre connects (avec lutilisation des Membership) pour voir les WebParts. Par dfault, vous tes dans le mode Design permettant seulement de rduire ou fermer les WebParts.

7.4. Formatter des WebParts


Par dfault, les WebParts nont aucun style do lapparence pauvre. Pour cela, vous avez la possibilit dappliquer des styles pr-dfinies :

Fig 3.5 Formats proposs par dfaut

Lautre manire consiste appliquer un style dfinie par lutilisateur mme, grce aux lments de style dune WebPartZone.
Proprits PartChromeStyle Description Style de la zone vide dans une

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 94 - 105

Dvelopper des composants serveur


MenuLabelHoverStyle EmptyZoneTextStyle HeaderStyle MenuVerbStyle PartStyle MenuLabelStyle MenuPopupStyle PartTitleStyle WebPartZone Style du Label lorsque la souris survole le Label Style de la zone de texte vide Style de len-tte Style du menu dun WebParts Style des WebParts dans la zone Style des Labels dans le menu Style du menu en haut droite Style de titre du WebParts

Voici un exemple de style pour les WebPartZone :


<asp:WebPartZone ID="Zone_2" runat="server" BorderColor="#CCCCCC" Font-Names="Verdana" Padding="6"> <PartChromeStyle BackColor="#F7F6F3" BorderColor="#E2DED6" Font-Names="Verdana" ForeColor="White" /> <MenuLabelHoverStyle ForeColor="#E2DED6" /> <EmptyZoneTextStyle Font-Size="0.8em" /> <MenuLabelStyle ForeColor="White" /> <MenuVerbHoverStyle BackColor="#F7F6F3" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" ForeColor="#333333" /> <HeaderStyle Font-Size="0.7em" ForeColor="#CCCCCC" HorizontalAlign="Center" /> <MenuVerbStyle BorderColor="#5D7B9D" BorderStyle="Solid" BorderWidth="1px" ForeColor="White" /> <PartStyle Font-Size="0.8em" ForeColor="#333333" /> <TitleBarVerbStyle Font-Size="0.6em" FontUnderline="False" ForeColor="White" /> <MenuPopupStyle BackColor="#5D7B9D" BorderColor="#CCCCCC" BorderWidth="1px" Font-Names="Verdana" Font-Size="0.6em" /> <PartTitleStyle BackColor="#5D7B9D" FontBold="True" Font-Size="0.8em" ForeColor="White" /> <ZoneTemplate> <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> </ZoneTemplate> </asp:WebPartZone>

7.5. Changement de mode


Dans le mode par dfaut Browse Mode , vous avez seulement la possibilit de minimier la zone ou la fermer. Pour pouvoir diter les WebParts, changer certaines proprits, rcuperer des WebParts, il faut changer de mode. Pour cela, il faudra implmenter des fonctions permettant le changement de mode. Nous allons prendre un exemple avec une DropDownList compos des 5 diffrents mode (Browse Mode, Design, Catalog Mode, Edit Mode, Connect Mode).
<asp:DropDownList ID="DisplayModeDropdown" runat="server" AutoPostBack="true" EnableViewState="false" OnSelectedIndexChanged=

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 95 - 105

Dvelopper des composants serveur


"DisplayModeDropdown_SelectedIndexChanged" />

WebPartManager _webmanager; // on cre un objet WebPartManager void Page_Init(object sender, EventArgs e) { Page.InitComplete += new EventHandler(InitComplete); } protected void InitComplete(object sender, System.EventArgs e) { _webmanager = WebPartManager.GetCurrentWebPartManager(Page); String WebPartManager.BrowseDisplayMode.Name; browseModeName =

// remplit la dropdownlist avec les modes disponibles foreach (WebPartDisplayMode mode in _manager.SupportedDisplayModes) { String modeName = mode.Name; // vrification de la validit dun mode if (mode.IsEnabled(_webmanager)) { ListItem item = new ListItem(modeName + " Mode", modeName); DisplayModeDropdown.Items.Add(item); } } } // Changement de page selon le mode slectionn protected void DisplayModeDropdown_SelectedIndexChanged(object sender, EventArgs e) { String selectedMode = DisplayModeDropdown.SelectedValue; WebPartDisplayMode _manager.SupportedDisplayModes[selectedMode]; if (mode != null) _webmanager.DisplayMode = mode; } protected void Page_PreRender(object sender, EventArgs e) { DisplayModeDropdown.SelectedValue _webmanager.DisplayMode.Name; } mode =

- La fonction Page_Init permet dinitialiser les contrles pendant le chargement de la page et fait appel la fonction InitComplete. - La fonction InitComplete rcupre le WebPartManager de la page concerne, tant donn quil est unique il existe un et un seul

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 96 - 105

Dvelopper des composants serveur WebPartManager. Il stock le WebPartManager dans lobjet _webmanager. Ensuite, une boucle permet de remplir la DropDownList des modes daffichage selon leur disponibilit. Par exemple si un Catalog Zone est disponible, on affichera le mode Catalog Mode dans la DropDownList, dans le cas contraire il ne sera pas affich. - La fonction DisplayModeDropdown est appele suite au changement dindex de la DropDownList et permet le changement de page selon le mode slectionn. - La fonction Page_PreRender permet tout simplement de mettre jour lobjet _webmanager en fonction du mode slectionn dans la DropDownList. Etant donn que ces diffrents modes ne sont pas visibles par dfaut, et ncessitent une connection, il faudra rajout le contrle de Login pour permettre lutilisateur de se connecter et daccder ensuite aux diffrents modes. Voici lapparence des WebParts et mode disponible par dfaut :

Fig 3.6 Mode par dfaut avant connection

Apparence des WebParts et mode disponible aprs connexion :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 97 - 105

Dvelopper des composants serveur

Fig 3.7 Mode disponible aprs connexion

7.6. CatalogZone
Un catalogue contient les WebParts qui ne sont pas utiliss ou qui ne doivent pas apparatre par dfaut. Il contient aussi les WebParts que lutilisateur fermer. Lutilisateur connect pourra ainsi construire sa page de WebParts grce un catalogue que ladministrateur aura remplit de WebPart auparavant. Qui dit catalogue, dit possibilit de choisir plusieurs reprise le mme WebPart et linsrer dans une zone, par exemple si vous choisissez un Label du catalogue, vous aurez la possibilit de linsrer autant de fois que vous le souhaitez, tant donn quil nest pas unique. Un catalogue est donc essentiellement une collection de WebParts disponible, do le nom de Catalog . Pour construire son catalogue, il faut tout dabord insrer une zone catalogue dans lequel on pourra ajouter trois type dlments. Un catalogue de page ( Page Catalog ) qui sera compos des WebParts ferms par lutilisateur, une dclaration de catalogue ( DeclarativeCatalogPart ) qui permet ladministrateur de lapplication WEB de remplir le catalogue de WebParts, et enfin un importateur de WebPart ( Import Catalog Part ) permettant lutilisateur dimporter des WebParts depuis sa machine. Voici le code source dun CatalogZone sans aucun style :
<asp:CatalogZone ID="CatalogZone1" runat="server"> <ZoneTemplate> <asp:PageCatalogPart ID="PageCatalogPart1" runat="server" /> <asp:DeclarativeCatalogPart ID="DeclarativeCatalogPart1" runat="server"> <WebPartsTemplate> <asp:Label ID="Label3" runat="server" Text="Label"></asp:Label> <br /> <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> </WebPartsTemplate> </asp:DeclarativeCatalogPart> <asp:ImportCatalogPart ID="ImportCatalogPart1" runat="server" /> </ZoneTemplate> </asp:CatalogZone>

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 98 - 105

Dvelopper des composants serveur Le PageCatalogPart et ImportCatalogPart ne sont pas ditables, il suffit tout simplement de les dposer dans le CatalogZone. Pour ce qui est de la DeclarativeCatalogPart, il faut diter le template pour pouvoir insrer des WebParts pour construire le catalogue.

Fig 3.8 CatalogZone

Le PageCatalog ci-dessous contient quatre WebParts ferms par lutilisateur. Pour rcuprer ces WebParts, il suffit de cocher les WebPart rcuprer puis choisir la zone puis cliquez sur le bouton Add .

Fig 3.9 Page Catalog

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 99 - 105

Dvelopper des composants serveur La DeclarativeCatalog comme ci-dessous contient deux WebParts. Pour les ajouter dans une nouvelle zone il suffit de cocher les WebParts concernes et la zone.

Fig 3.10 Declarative Catalog

LImport Catalog Part comme ci-dessous permet dimporter des WebPart, pour cela il faut spcifier le chemin et la zone.

Fig 3.11 Import WebParts

7.7. EditorZone
Les WebParts sont modifiables dans la zone ddition Editor Zone par lintermdiaire de quatre types dlment de modification : - ApparenceEditorPart - BehaviorEditorPart - LayoutEditorPart - PropertyGridEditorPart Voici les sources dun EditorZone sans style appliqu :

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 100 - 105

Dvelopper des composants serveur


<asp:EditorZone ID="EditorZone1" runat="server"> <ZoneTemplate> <asp:AppearanceEditorPart runat="server" ID="Appearance1"> </asp:AppearanceEditorPart> <asp:LayoutEditorPart runat="server" ID="Layout1"> </asp:LayoutEditorPart> <asp:BehaviorEditorPart ID="BehaviorEditorPart1" runat="server" /> <asp:PropertyGridEditorPart ID="PropertyGridEditorPart1" runat="server" /> </ZoneTemplate> </asp:EditorZone>

Pour accder aux diffrents menus de modification, il faut tre connect, tre dans le mode Edit Mode et choisir le WebPart modifier en accdant son menu (en haut droit de chaque WebPart) puis choisir Edit. ApparenceEditorPart va vous permettre de modifier lapparence des WebParts notamment le titre, la taille, la visiblit.

Le LayoutEditorPart permet principalement de modifier la zone conteneur.

Le BehaviorEditorPart permet de contrler le comportement des WebParts, de pouvoir fermer, diminuer, modifier, cacher les WebParts, de modifier leur description, les liens.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 101 - 105

Dvelopper des composants serveur

Le PropertyGridEditorPart permet dditer des proprits dans le code source ayant comme attribut WebBrowsable .

7.8. Conclusion
Les WebParts permettent ainsi de crer des portails dynamique et facilement personnalisable. Cette nouvelle fonctionnalit, de plus en plus rpandue sur de grand site tel que Google et Yahoo, permet lutilisateur

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 102 - 105

Dvelopper des composants serveur de construire sa page, dajouter ou denlever des fentres selon son choix, de dfinir lapparence et la disposition de ses fentre. Lutilisateur a un contrle quasi-total de la page Web. Il est cependant dommage que les WebParts intgrs par dfaut lASP.NET 2.0 ne soit pas un contrle cot client, plus exactement avec lintgration dun CallBack sans aucun rafrachissement de la page. Il est aujourdhui possible de rsoudre ce problme en implmentant la version AJAX de Microsoft pour lASP.NET, ATLAS.

8.Conclusion
Les nouveauts du langage ASP.NET 2.0 de Microsoft apportent non seulement une simplicit au dveloppeur dans son travail, mais aussi des nouvelles interfaces WEB, des nouvelles fonctionnalits pour les utilisateurs et clients. Ce langage innovant apporte une nouvelle conception des sites Internet de nouvelle gnration , de plus les applications WEB dveloppes en ASP.NET 2.0 seront combines avec la version AJAX de Microsoft, ATLAS pour rendre la navigation fluide et sans aucun rafrachissement. Dautres nouveauts nont pas t traites dans cette article sont aussi important, comme les nouveaux contrles de Login et de donnes (GridView, DetailsView, ), et la scurit des applications.

OFPPT @

Document
C-A-001.doc

Millsime
mars 09

Page 103 - 105