Vous êtes sur la page 1sur 14

Plan

ASP.NET
1. Dveloppement
2. Contrles
2.1 Contrles lmentaires
2.2 Prsentation de donnes
2.3 Gestion des utilisateurs
2.4 Pagelet

Lionel Seinturier
Universit des Sciences et Technologies de Lille
Lionel.Seinturier@lifl.fr

3. Complments sur l'API

26/11/07
ASP.NET

Lionel Seinturier

ASP.NET

ASP.NET

Lionel Seinturier

ASP.NET

Active Server Pages (ASP)

ASP vs ASP.NET

du code Java embarqu dans une page HTML


mmes principes JSP, PHP

volution des ASP pour prendre en compte .NET


extension .asp (.aspx pour ASP.NET)

les fichiers .aspx sont stocks sur le serveur (comme des docs)
ils sont dsigns par une URL
http://www.lifl.fr/prog.aspx
le chargement de l'URL provoque l'excution de l'ASP ct serveur

ASP : VBScript ou JScript


ASP: interprt/non typ

ASP.NET : VB, C#, ... langages .NET


ASP.NET : compil/typ

ASP.NET vs JSP
1
Client

Serveur
4

IE
Firefox
...
ASP.NET

modle de programmation similaire


++ ASP.NET = composants graphiques (contrles)

2
prog.aspx

3
CLR

ASP.NET vs servlet

.NET

pas d'quivalent de l'API servlet dans le monde ASP.NET


en interne, les ASP.NET sont traduites en classes et compiles
Lionel Seinturier

ASP.NET

Lionel Seinturier

1. Dveloppement

1. Dveloppement

Illustration du fonctionnement

Principe de fonctionnement

<%@ Page Language="c#" %>


<HTML> <BODY>

<%@ Page Language="c#" %>


<HTML> <BODY>

<H1>Table des factorielles</H1>


<%
int i,fact;
for ( i=1,fact=1 ; i<4 ; i++, fact*=i ) {
Response.Write( i + "! =" + fact + "<BR>" );
}
%>
</BODY> </HTML>

<H1>Table des factorielles</H1>


<%
int i,fact;
for ( i=1,fact=1 ; i<4 ; i++, fact*=i )

du code C#
{

Response.Write( i + "! =" + fact + "<BR>" );


}
%>
</BODY> </HTML>

rsultat = HTML
gnr via l'objet
prdfini Response

invocation
ce qui est
renvoy
au client

excution
ct serveur

ASP.NET

Lionel Seinturier

<H1>Table des factorielles</H1>


1!
= 1<BR>
2!
= 2<BR>
3!
= 6<BR>
</BODY> </HTML>

ASP.NET

1. Dveloppement

<HTML> <BODY>

1. Dveloppement

Principe de fonctionnement

Mthodes et variables d'instance

plusieurs zones <% ... %> possibles dans une mme ASP.NET
excutes dans leur ordre de dfinition

Entre les balises <script

une classe gnre pour chaque ASP.NET


ne change pas tant que le fichier .aspx n'est pas modifi
instancie pour traiter une requte
pas de persistence de l'instance (objet) entre 2 invocations
besoin : conserver de
l'information
dclarer des attributs static
>

Lionel Seinturier

runat="server">

et </script>

<%@ Page Language="c#" %>


<HTML> <BODY>
<H1>Compteur</H1>
<script runat="server">
static int compteur = 0;
int GetCompteur() {
return compteur++;
}
</script>
<H1> <% Response.Write(GetCpt()); %> </H1>
</BODY> </HTML>

ASP.NET

Lionel Seinturier

ASP.NET

1. Dveloppement

Lionel Seinturier

1. Dveloppement
Balise <script>

Exemple

Le code peut tre dfini dans un fichier externe


1re invocation
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>Compteur</H1>
<script runat="server" src="url" />
<H1> <% Response.Write(GetCpt());
</BODY> </HTML>

2me invocation

%> </H1>

Directive Import
<%@ Import Namespace = "...">

ASP.NET

Lionel Seinturier

1. Dveloppement

us i ng

ASP.NET

10

1. Dveloppement

Les objets implicites

Rcupration des donnes d'un formulaire

Objets prdclars utilisables dans le code

Proprit Params de l'objet prdfini Request

Request
Response
Session

la requte qui a provoqu le chargement


la rponse la requte de chargement

Cache
Server
Trace

retourne le texte saisi


ou null si le nom de paramtre n'existe pas

suivi de session pour un mme client


Session.Add( string name,
Session[string name]

Application

Lionel Seinturier

object value )

espace de donnes partag entre toutes les ASP.NET


idem Session
donnes gardes en cache par le serveur
information sur le serveur, inclusion, dlgation de pages
gnrer des traces d'excution

<HTML> <BODY>
<FORM ACTION="http://..."
METHOD=POST>
Nom <INPUT NAME="nom"> <P>
Prnom <INPUT NAME="prenom"> <P>
<INPUT TYPE=SUBMIT VALUE="Envoi">
<INPUT TYPE=RESET
VALUE="Remise zro">
</FORM>
</BODY> </HTML>

ASP.NET

11

Lionel Seinturier

ASP.NET

12

1. Dveloppement

Lionel Seinturier

1. Dveloppement

Rcupration des donnes d'un formulaire

ASP.NET 4

Inclusion de pages
ASP.NET 1

aggrgation des rsultats fournis


par plusieurs page
meilleure modularit
meilleure rutilisation

<%@ Page Language="c#" %>


<HTML> <BODY>
<H1>Exemple de rsultat</H1>
Bonjour
<% Response.Write( Request.Params.Get("prenom")
); %>
<% Response.Write( Request.Params.Get("nom")
); %>
</BODY> </HTML>

ASP.NET 5
ASP.NET ____ ASP.NET 2

ASP.NET 3

Mthode Server.Execute
Fichier inc.aspx

<%@ Page Language="c#" %>


<HTML> <BODY>
<H1>ASP.NET principale</H1>
<%
Server.Execute(" inc.aspx ");
%>
</BODY> </HTML>

clic

<%@ Page Language="c#" %>


<HTML> <BODY>
<H1>ASP.NET incluse</H1>
</BODY> </HTML>

URL
ASP.NET

13

Lionel Seinturier

ASP.NET

14

1. Dveloppement

1. Dveloppement

Dlgation de page

Gestion des erreurs

Une page peut dlger le traitement d'une requte une autre


prise en compte complte de la requte par la page
dlgue

Erreur d'excution du code


ex. : NullReferenceException , DivideByZeroException , ...
dans tous les cas, erreur rcupre dans le navigateur client

Mthode Server.Transfer
Tout ce qui est aprs Transfer est ignor
2 possibilits
<%@ Page Language="c#" %>
<HTML> <BODY>
<H1>ASP.NET principale</H1>
<%
Server.Transfer(" transf.aspx ");
%>
</BODY> </HTML>

URL

conserver la page par dfaut construite par le serveur Web


en concevoir une adapte aux besoins particuliers de l'application

Lionel Seinturier

ASP.NET

15

Lionel Seinturier

ASP.NET

16

1. Dveloppement

Lionel Seinturier

1. Dveloppement
Exemple de gestion d'erreur

Exemple de gestion d'erreur


Sihasard
paged'erreur

<%@ Page Language="c#" %>


<HTML> <BODY>
<H1>Pourvu ... !!</H1>

=0
par dfaut

<% Random r = new Random();


double h = (double)r.Next();
int hasard = (int)
(h/Int32.MaxValue*5); %>
<H1> <% Response.Write(12/hasard); %> </H1>
</BODY> </HTML>

<%@ Page Language="c#"


ErrorPage="err.aspx" %>
<HTML> <BODY>
<H1>Pourvu ... !!</H1>
<% Random r = ... %>

<%@ Page Language="c#" %>

<H1> <% ... (12/hasard)


</BODY> </HTML>

</BODY> </HTML>

%> </H1>

<HTML> <BODY>
<h1>Le 0 est sorti

!!</h1>

Si hasard = 0
d'erreur
page

ASP.NET

17

Lionel Seinturier

err.aspx

ASP.NET

1. Dveloppement
Gestion des traces

System.Web.TraceContext

Trace.Write(string message)
Trace.Write(string categorie, string message)
Trace.Write(string categorie, string message, Exception e)
idem mthode Warn : les messages apparaissent en rouge dans les traces

Lionel Seinturier

1. Dveloppement
Activation des traces

debugger
contrler/inspecter le droulement d'une appli web
la main : Response.Write
: lourd, long enlever pour passer en prod.

Objet prdfini Trace

18

<%@ Page Trace="true" %>

Exemple factorielle
chaque itration :
Trace.Write( "i=" + i + " / fact=" + fact );

ASP.NET

19

Lionel Seinturier

ASP.NET

20

Plan

Lionel Seinturier

2. Contrles
Philosophie ASP.NET
Sparer

1. D v e l op p e m e nt

rendu graphique
traitement

2. Contrles
2.1 Contrles lmentaires
2.2 Prsentation de donnes
2.3 Autres contrles
2.4 Pagelet

2 fichiers
.aspx
le code de prsentation et celui des contrles
fichier XTHML (HTML 4.0 formul en XML)
Web form
.aspx.cs , .aspx.vb , ...
fichier dit codebehind
classe contenant les traitements

3. Complments sur l'API

ASP.NET

21

Lionel Seinturier

ASP.NET

2. Contrles

22

Lionel Seinturier

2. Contrles

Les contrles

Les contrles existants par dfaut

Composants graphiques pour lcriture de pages ASP.NET

toutes les balises HTML standards (<input> <img> <p> ...)


composants supplmentaires fournis par MS (redondants avec HTML mais + volus)

pour agir avec l'utilisateur


pour ragir aux actions de l'utilisateur

: lui prsenter de l'information


: dclencher des traitements

utilisation en drag-and-drop dans VS pour la conception page web


analogue atelier conception IHM en client lourd
classe / objet

caractristiques d'affichage (ex. Text pour un TextBox)


vnements: ractions (clic, frappe, changement, ...)
autant d'objets par page que de contrles "dposs" sur la page
interaction avec la page interaction avec les objets
rendu HTML de la page partir de l'tat des objets

proprits

: les

affichage
: Label, Image, Panel, Tabel

bouton : Button, Hyperlink,


ImageButton, LinkButton

saisie
: TextBox,
CheckBox, RadioButton, FileUpload, ...

liste : ListBox, DropDownList, ...

validation
: CompareValidator, RequiredFieldValidator, RangeValidator, ...

divers : Calendar

donnes : DataList, GridView,


DetailsView
login
....
+ de nouveaux contrles peuvent tre programms par lutilisateur

ASP.NET

23

Lionel Seinturier

ASP.NET

24

2.1 Contrles lmentaires

Lionel Seinturier

2.1 Contrles lmentaires

Exemple

Exemple

Contrles TextBox et Button


Contrles TextBox et Button

Fichier WebForm1.aspx

<%@ Page Language="c#" CodeFile="WebForm1.aspx.cs" Inherits="WebForm1" %>


<html> <body> <form id="form1"
runat="server">
<asp:TextBox ID="MyTextBox" runat="server" />
OnClick="MyButton_Click"

Fichier WebForm1.aspx.cs
public partial class WebForm1

System.Web.UI.Page {

public void MyButton_Click(object sender, System.EventArgs e)


MyTextBox.Text = "Hello world!";
}

demo >>
ASP.NET

25

Lionel Seinturier

2.1 Contrles lmentaires


Contrle TextBox

Lionel Seinturier

2.1 Contrles lmentaires


1re solution : .aspx + codebehind + association (On...) dclare dans .aspx

ID
: identificateur unique (proprit prsente pour tous les contrles)
Text
: le texte affich
MaxLength
: taille max du texte
TextMode
: SingleLine | MultiLine | Password
ReadOnly
: false | true
Columns
: le nombre de colonnes
Rows
: le nombre de lignes (MultiLine)
BackColor, BorderColor, ForeColor
: couleurs
BorderStyle, BorderWidth, Font
: affichage

vnement principal
: le texte change

26

Association page - code

Proprits principales

TextChanged

ASP.NET

(mthode de raction OnTextChanged)

2me solution : sans codebehind


dfinir le code des mthodes de traitements des vnements dans le fichier .aspx
entre des balises <script runat="server"> et </script>
1 seul fichier grer, moins modulaire
3me solution : .aspx + codebehind + association (On...) dclare dans codebehind
ne pas utiliser l'attribut OnClick dans le fichier .aspx
ajouter un gestionnaire d'vnement sur le bouton dans le code
C# en redfinissant la mthode excute lors du chargement
(OnInit)
couplage moins fort entre le fichier .aspx et le codebehind
plus difficile manipuler, moins intuitif

ASP.NET

27

Lionel Seinturier

ASP.NET

28

2.2 Prsentation de donnes

Lionel Seinturier

2.2 Prsentation de donnes


Contrle DataSource

Contrle GridView

source des donnes afficher

prsentation d'information sous forme de tableau

Server, ...)

dition, suppression

pager automatique
tri

SqlDataSource : un SGBD (SQL


AccessDataSource
: un fichier Access
XmlDataSource : un fichier XML

...)

Exemple d'utilisation
dition des donnes d'une table SQL

ObjectDataSource

: des objets (C#, VB,

Dfinition dune SqlDataSource


>

une connection string (~ chemin daccs aux donnes)


4 commandes SQL : SELECT, INSERT, DELETE, UPDATE

associ un contrle DataSource

ASP.NET

29

2.2 Prsentation de donnes

Lionel Seinturier

ASP.NET

30

2.2 Prsentation de donnes

Lionel Seinturier

Contrle GridView

Exemples

Proprits principales

Exemple de DataSource

ID

<asp:SqlDataSource ID='SqlDataSource1' runat='server'


ConnectionString='Driver={SQL Server};server=localhost;database=master'
ProviderName='System.Data.Odbc'
SelectCommand='SELECT * FROM [foo]'
DeleteCommand='DELETE FROM [foo] WHERE [nom] = ?'
InsertCommand='INSERT INTO
UpdateCommand='UPDATE
</asp:SqlDataSource>

AllowPaging, AllowSorting
AutoGenerateColumns
AutoGenerateDeleteButton (idem Edit, Select)

[foo] ([nom], [age]) VALUES (?, ?)'


[foo] SET [age] = ? WHERE [nom] = ?'>

Rows
: les lignes affiches dans le GridView
SelectedIndex : l'indice de la ligne slectionne
ex. utilisation : GridView1.Rows[GridView1.SelectedIndex].Cells[0].Text
EditIndex, PageIndex

Exemple de GridView
<asp:GridView ID='GridView1' runat='server'
DataSourceID="SqlDataSource1" DataKeyNames="nom"
AutoGenerateColumns="True"

vnements principaux
RowUpdating : juste avant de mettre voir une ligne
RowUpdated : aprs avoir mis jour une ligne
idem SelectedIndexChanging/ed, Sorting/ed, RowDeleting/ed, PageIndexChanging/ed

AllowPaging='True' PageSize='4' AllowSorting='True'


AutoGenerateEditButton='true' AutoGenerateDeleteButton='true'>

demo >>

</asp:GridView>
ASP.NET

31

Lionel Seinturier

ASP.NET

2.2 Prsentation de donnes

32

Lionel Seinturier

2.2 Prsentation de donnes

Contrle DetailsView

Exemple

prsentation sous forme de fiches


mme action que GridView (dition, suppression)
action supplmentaire : ajout
<asp:DetailsView ID="DetailsView1" runat="server"
DataSourceID="SqlDataSource1" DataKeyNames="nom"
AutoGenerateRows="true"
AutoGenerateEditButton="True"
AutoGenerateDeleteButton="True"
AutoGenerateInsertButton="True"
AllowPaging="True" >
</asp:DetailsView>

demo >>
ASP.NET

33

2.3 Autres contrles

Lionel Seinturier

ASP.NET

34

2.3 Autres contrles

Lionel Seinturier

Autre exemple de contrle

Contrle Login

Contrle Login

Modification du fichier Web.Config

grer les comptes utilisateurs sur un site


crer des comptes
les stocker dans une base de donnes
offrir un contenu diffrents selon que lutilisateur est connect ou non

<configuration xmlns="http://schemas.microsoft.com/.NETConfiguration/v2.0 ">


<appSettings/>
<connectionStrings>
La base de donnes dans laquelle
<remove name="LocalSqlServer"/>
vont tre stockes les infos de login
<add
name="LocalSqlServer"
connectionString="Data Source= localhost;Initial Catalog=aspnetdb;
Integrated Security=True"
providerName="System.Data.SqlClient"/>
</connectionStrings>

Login
: se connecter
LoginStatus
: affichage du statut (connect/non connect)
CreateUserWizard : cration dun nouvel utilisateur
ChangePassword
PasswordRecovery

: changer le mot de passe du compte


: rcuprer son mot de passe

<system.web>
<authentication mode="Windows"/>
<authentication mode="Forms"/>

ASP.NET

35

Lionel Seinturier

ASP.NET

36

2.3 Autres contrles

2.3 Autres contrles

Contrle Login

Contrle Login

Modification du fichier Web.Config

Modification du fichier Web.Config

Par dfaut le contrle Login impose des rgles strictes de scurit sur les mots de passe

<system.web>
<authentication mode="Forms"/>
<membership defaultProvider="MyMembershipProvider"
<providers>
<add
name="MyMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
minRequiredNonalphanumericCharacters="0"
minRequiredPasswordLength="1"
passwordStrengthRegularExpression=""

au moins 7 caractres
au moins 1 caractre non alphanumrique

Lionel Seinturier

possibilit de rduire ces exigences

>

connectionStringName=" LocalSqlServer " />


</providers>
</membership>
La rf. sur la chane
</system.web>
</configuration>
de connexion

ASP.NET

37

Lionel Seinturier

ASP.NET

38

Lionel Seinturier

2.3 Autres contrles

2.4 Pagelet

Contrle Login

Contrles dfinis par l'utilisateur

Cration de la base des utilisateurs

factorisation de code HTML et de scripts


fichier .ascx

rogramme aspnet_regsql.exe
base SQL Server aspnetdb

p
\WINDOWS\Microsoft.NET\Framework\v2.0.xxx

<table><tr>
<td><asp:textbox id="jour" runat="server" /></td><td>/</td>
<td><asp:textbox id="mois" runat="server" /></td><td>/</td>
<td><asp:textbox id="annee" runat="server" /></td>

alternativement fichier XML Rq: gestion des utilisateurs et des

<script language="c#" runat="server">


public string Jour {
// les proprits de la pagelet
get { return jour.Text; }
set {
jour.Text=value; }
}

membership provider via le site web dadmin

/* idem Mois, Annee */


</script>
</tr></table>

ASP.NET

39

Lionel Seinturier

ASP.NET

40

2.4 Pagelet

2.4 Pagelet
Utilisation de pagelet

Utilisation de pagelet
<%@ Register
TagPrefix
TagName
Src

le namespace XML choisi


le nom de la pagelet choisi
l'URL pour accder au fichier .ascx

<%@ Register TagPrefix='foo' TagName='bar' Src='Date.ascx' %>


<%@ Page Language='c#' %>
<html><body>
<form runat='server'>
<foo:bar id="JMA" runat="server" />
<asp:label id='Label' runat='server' />
<asp:button id='Button' text='Go!' runat='server' onclick='Click' />
</form>
<script runat='server'>
void Click(object sender,
Label.Text = JMA.Jour;
}
</script></body></html>
ASP.NET

Lionel Seinturier

clic

System.EventArgs e) {

41

Lionel Seinturier

ASP.NET

42

Lionel Seinturier

2.4 Pagelet

2.4 Pagelet

Utilisation de pagelet

Autre faon de dfinir des contrles utilisateur

chaque pagelet est compile en une classe nompagelet_ascx (ex : Date_ascx)


instancie lorsqu'on les utilise
<foo:bar id='JMA' runat='server' />

tendre System.Web.UI.WebControls.WebControl
redfinir CreateChildControls

Alternativement

Avantage
: le contrle peut-etre dfini l'aide d'un DOM HTML
on ne se proccupe pas d'crire le code HTML

peut tre instancie par programme


ajoute dynamiquement une page

LoadControl('Date.ascx')
public class MyWebControl : WebControl {
protected override void CreateChildControls()
Table tbl = new Table();
TableRow row = new tableRow();

<script runat='server'>
void Page_Load() {
Control dt = LoadControl('Date.ascx');
((Date_ascx)dt).Jour = 12;
Frm.Controls.Add(dt);
}
</script>

TableCell cell = new TableCell();


TextBox box = new TextBox();
box.ID = "jour";
cell.Controls.Add(box);
row.Cells.Add(cell);
table.Rows.Add(row);
Controls.Add(table);

<form id='Frm' runat='server'>


...

ASP.NET

43

Lionel Seinturier

}
ASP.NET

Plan

44

Lionel Seinturier

3. Complments sur l'API


Les objets prdfinis ASP.NET

1. D v e l op p e m e nt

Request

la requte qui a provoqu le chargement


System.Web.HttpRequest

2. Contrles
2.1 Contrles lmentaires
2.2 Prsentation de donnes
2.3 Pagelet

.Params

les paramtres de la requtes

.RawUrl
.FilePath
.PhysicalPath

l'URL complte
le chemin du fichier dans l'URL
le chemin du fichier sur disque

c:\Inetput\wwwroot\foobar\c2\WebForm1.aspx

.PhysicalApplicationPath

3. Complments sur l'API

45

la racine de l'application
c:\Inetput\wwwroot\foobar\

.Headers
.UserHostName
.UserHostAddress
.UserLanguages
.Cookies
ASP.NET

/foobar/c2/WebForm1.aspx

Lionel Seinturier

ASP.NET

les en-ttes de la requte HTTP


l'@ du client
l'IP du client
les prfrences du client en terme de langues
lecture d'un cookie
46

Lionel Seinturier

3. Complments sur l'API

3. Complments sur l'API

Les objets prdfinis ASP.NET


Response

Les objets prdfinis ASP.NET

la rponse une requte

Session

System.Web.HttpResponse

gestion d'une session client


System.Web.SessionState.HttpSessionState

.ContentType
.Cache

le type MIME du contenu retourn au client (text/html, image/gif, ...)


gestion de la politique de cache de la rponse (date expiration)

.SetCookie

positionnement d'un cookie chez le client

Fonctionne comme une table de hachage indice


Session["key"] = object
object res = Session["key"]
object res = Session[int]
Session.Count
Session.GetEnumerator()
Session.Remove("key")
Session.RemoveAt(int)
Session.RemoveAll()

// null si la cl n'existe pas


le i-me lment de la session
le # d'lments dans la session
un itrateur sur toutes les lments de la session

Session cre lors de la 1re visite d'un client (Session.IsNewSession vaut true)
Session.Timeout
dlai d'inactivit (en minutes) au del duquel la session expire
ASP.NET

47

Lionel Seinturier

ASP.NET

48

Lionel Seinturier

Les objets prdfinis ASP.NET

3. Complments sur l'API

Cache

Les objets prdfinis ASP.NET


Application

espace de donnes partag par tous les clients


par rapport Application : peut avoir une dure de vie limite

System.Web.Caching.Cache

espace de donnes partag par tous les clients

Server

System.Web.HttpApplicationState

informations sur le server


System.Web.HttpServerUtility

Fonctionne comme une table de hachage indice

Application["key"] = object

object res = Application["key"] // null si la cl n'existe pas

object res = Application[int]


le i-me lment de la session

Application.Count
le #
d'lments dans la session

Application.
GetEnumerator()
un itrateur sur toutes les lments de la session

Application.Remove("key")

Application.RemoveAt(int)

Application.RemoveAll()

3. Complments sur

ASP.NET

50

Lionel Seinturier