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
[email protected]
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