• Aucun résultat trouvé

[PDF] Formation ASP.NET Pdf | Télécharger PDF

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Formation ASP.NET Pdf | Télécharger PDF"

Copied!
13
0
0

Texte intégral

(1)

ASP.NET 1 Lionel Seinturier

ASP.NET

Lionel Seinturier

Université des Sciences et Technologies de Lille

Lionel.Seinturier@lifl.fr

26/11/07

ASP.NET 2 Lionel Seinturier

Plan

1. Développement

2. Contrôles

2.1 Contrôles élémentaires

2.2 Présentation de données

2.3 Gestion des utilisateurs

2.4 Pagelet

3. Compléments sur l'API

ASP.NET

Active Server Pages (ASP)

• du code Java embarqué dans une page HTML • mêmes principes JSP, PHP

• les fichiers .aspxsont stockés sur le serveur (comme des docs)

• ils sont désignés par une URL http://www.lifl.fr/prog.aspx

• le chargement de l'URL provoque l'exécution de l'ASP côté serveur

Client Serveur IE Firefox ... prog.aspx 1 4 2 3 CLR .NET

ASP.NET

ASP vs ASP.NET

• évolution des ASP pour prendre en compte .NET • extension .asp (.aspx pour ASP.NET)

• ASP : VBScript ou JScript ASP.NET : VB, C#, … ∀ langages .NET • ASP: interprété/non typé ASP.NET : compilé/typé

ASP.NET vs JSP

• modèle de programmation similaire

• ++ ASP.NET = composants graphiques (contrôles)

ASP.NET vs servlet

• pas d'équivalent de l'API servlet dans le monde ASP.NET • en interne, les ASP.NET sont traduites en classes et compilées

(2)

ASP.NET 5 Lionel Seinturier

1. Développement

<%@ 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>

Illustration du fonctionnement

invocation Ö exécution côté serveur

ASP.NET 6 Lionel Seinturier

1. Développement

Principe de fonctionnement

<%@ 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> résultat = HTML généré via l'objet prédéfini Response du code C# <HTML> <BODY>

<H1>Table des factorielles</H1> 1! = 1<BR> 2! = 2<BR> 3! = 6<BR> </BODY> </HTML> ce qui est renvoyé au client

1. Développement

Principe de fonctionnement

• plusieurs zones <%... %>possibles dans une même ASP.NET

• exécutées dans leur ordre de définition • une classe générée pour chaque ASP.NET

• ne change pas tant que le fichier .aspx n'est pas modifié • instanciée pour traiter une requête

• pas de persistence de l'instance (objet) entre 2 invocations • besoin : conserver de l'information

¾ déclarer des attributs static

1. Développement

Méthodes et variables d'instance

Entre les balises <script 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>

(3)

ASP.NET 9 Lionel Seinturier

1. Développement

Exemple

2ème invocation 1ère invocation

ASP.NET 10 Lionel Seinturier

1. Développement

Balise <script>

Le code peut être défini dans un fichier externe

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

<H1>Compteur</H1>

<script runat="server" src="url" /> <H1> <% Response.Write(GetCpt()); %> </H1> </BODY> </HTML>

Directive Import

<%@ Import Namespace = "..."> ≈ using

1. Développement

Les objets implicites

Objets prédéclarés utilisables dans le code

Request la requête qui a provoqué le chargement Response la réponse à la requête de chargement Session suivi de session pour un même client

Session.Add( string name, object value ) Session[string name]

Application espace de données partagé entre toutes les ASP.NET

idem Session

Cache données gardées en cache par le serveur

Server information sur le serveur, inclusion, délégation de pages Trace générer des traces d'exécution

1. Développement

Récupération des données d'un formulaire

Propriété Paramsde l'objet prédéfini Request

Ö retourne le texte saisi

Ö ou nullsi le nom de paramètre n'existe pas

<HTML> <BODY>

<FORM ACTION="http://..." METHOD=POST>

Nom <INPUT NAME="nom"> <P> Prénom <INPUT NAME="prenom"> <P> <INPUT TYPE=SUBMIT VALUE="Envoi"> <INPUT TYPE=RESET

VALUE="Remise à zéro"> </FORM>

(4)

ASP.NET 13 Lionel Seinturier

1. Développement

<%@ Page Language="c#" %> <HTML> <BODY> <H1>Exemple de résultat</H1> Bonjour <% Response.Write( Request.Params.Get("prenom") ); %> <% Response.Write( Request.Params.Get("nom") ); %> </BODY> </HTML>

Récupération des données d'un formulaire

clic

ASP.NET 14 Lionel Seinturier

1. Développement

Inclusion de pages

• aggrégation des résultats fournis par plusieurs page

Ö meilleure modularité Ö meilleure réutilisation Méthode Server.Execute ASP.NET ASP.NET 1 ASP.NET 2 ASP.NET 3 ASP.NET 4 ASP.NET 5 <%@ Page Language="c#" %> <HTML> <BODY> <H1>ASP.NET principale</H1> <% Server.Execute(" inc.aspx "); %> </BODY> </HTML> Fichier inc.aspx <%@ Page Language="c#" %> <HTML> <BODY> <H1>ASP.NET incluse</H1> </BODY> </HTML> URL

1. Développement

Délégation de page

Une page peut déléger le traitement d'une requête à une autre Ö prise en compte complète de la requête par la page déléguée Méthode Server.Transfer

Tout ce qui est après Transferest ignoré

<%@ Page Language="c#" %> <HTML> <BODY> <H1>ASP.NET principale</H1> <% Server.Transfer(" transf.aspx "); %> </BODY> </HTML> URL

1. Développement

Gestion des erreurs

Erreur d'exécution du code

ex. : NullReferenceException, DivideByZeroException, …

Ö dans tous les cas, erreur récupérée dans le navigateur client

2 possibilités

• conserver la page par défaut construite par le serveur Web • en concevoir une adaptée aux besoins particuliers de l'application

(5)

ASP.NET 17 Lionel Seinturier

1. Développement

Exemple de gestion d'erreur

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

<H1>Pourvu ... !!</H1> <% Random r = new Random(); double h = (double)r.Next();

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

Si hasard = 0 page d'erreur par défaut

ASP.NET 18 Lionel Seinturier

1. Développement

Exemple de gestion d'erreur

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

<HTML> <BODY>

<h1>Le 0 est sorti !!</h1>

</BODY> </HTML>

Si hasard = 0

page d'erreur err.aspx <%@ Page Language="c#" ErrorPage="err.aspx" %> <HTML> <BODY> <H1>Pourvu ... !!</H1> <% Random r = ... %> <H1> <% ... (12/hasard) %> </H1> </BODY> </HTML>

1. Développement

Gestion des traces

• debugger

• contrôler/inspecter le déroulement d'une appli web

Ö à la main : Response.Write : lourd, long à enlever pour passer en prod.

Objet prédéfini Trace System.Web.TraceContext

• Trace.Write(string message)

• Trace.Write(string categorie, string message)

• Trace.Write(string categorie, string message, Exception e)

• idem méthode Warn : les messages apparaissent en rouge dans les traces

1. Développement

Activation des traces

<%@ Page Trace="true" %>

Exemple factorielle À chaque itération :

(6)

ASP.NET 21 Lionel Seinturier

Plan

1. Développement

2. Contrôles

2.1 Contrôles élémentaires

2.2 Présentation de données

2.3 Autres contrôles

2.4 Pagelet

3. Compléments sur l'API

ASP.NET 22 Lionel Seinturier

2. Contrôles

Philosophie ASP.NET

Séparer • rendu graphique • traitement 2 fichiers • .aspx

le code de présentation et celui des contrôles fichier XTHML (HTML 4.0 formulé en XML) Web form

• .aspx.cs , .aspx.vb , … fichier dit codebehind

classe contenant les traitements

2. Contrôles

Les contrôles

Composants graphiques pour l’écriture de pages ASP.NET

• pour agir avec l'utilisateur : lui présenter de l'information • pour réagir aux actions de l'utilisateur : déclencher des traitements • utilisation en drag-and-drop dans VS pour la conception page web

• analogue atelier conception IHM en client lourd • classe / objet

• propriétés : les caractéristiques d'affichage (ex. Text pour un TextBox) • événements: réactions (clic, frappe, changement, …)

• autant d'objets par page que de contrôles "déposés" sur la page • interaction avec la page ≡ interaction avec les objets • rendu HTML de la page à partir de l'état des objets

2. Contrôles

Les contrôles existants par défaut

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

• composants supplémentaires fournis par MS (redondants avec HTML mais + évolués) • affichage : Label, Image, Panel, Tabel

• bouton : Button, Hyperlink, ImageButton, LinkButton • saisie : TextBox, CheckBox, RadioButton, FileUpload, … • liste : ListBox, DropDownList, …

• validation : CompareValidator, RequiredFieldValidator, RangeValidator, … • divers : Calendar

• données : DataList, GridView, DetailsView • login

• ….

(7)

ASP.NET 25 Lionel Seinturier

2.1 Contrôles élémentaires

Exemple

Contrôles TextBox et Button

demo >>

ASP.NET 26 Lionel Seinturier

2.1 Contrôles élémentaires

Exemple

Contrôles TextBox et Button

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

<body>

<form id="form1" runat="server">

<asp:TextBox ID="MyTextBox" runat="server" />

<asp:Button ID="MyButton" runat="server" OnClick="MyButton_Click" /> </form>

</body>

public partial class WebForm1 : System.Web.UI.Page {

public void MyButton_Click(object sender, System.EventArgs e) { MyTextBox.Text = "Hello world!";

} } Fichier WebForm1.aspx.cs Fichier WebForm1.aspx

2.1 Contrôles élémentaires

Contrôle TextBox

Propriétés principales

• ID : identificateur unique (propriété présente pour tous les contrôles) • 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

Événement principal

• TextChanged : le texte change (méthode de réaction OnTextChanged)

2.1 Contrôles élémentaires

Association page - code

1ère solution : .aspx + codebehind + association (On…) déclarée dans .aspx 2ème solution : sans codebehind

• définir le code des méthodes de traitements des événements dans le fichier .aspx entre des balises <script runat="server">et </script>

Ö 1 seul fichier à gérer, moins modulaire

3ème solution : .aspx + codebehind + association (On…) déclarée dans codebehind • ne pas utiliser l'attribut OnClick dans le fichier .aspx

• ajouter un gestionnaire d'événement sur le bouton dans le code C# en redéfinissant la méthode exécutée lors du chargement (OnInit) Ö couplage moins fort entre le fichier .aspx et le codebehind Ö plus difficile à manipuler, moins intuitif

(8)

ASP.NET 29 Lionel Seinturier

2.2 Présentation de données

Contrôle GridView

• présentation d'information sous forme de tableau • édition, suppression

• pager automatique • tri

Exemple d'utilisation

• édition des données d'une table SQL

Ö associé à un contrôle DataSource

ASP.NET 30 Lionel Seinturier

2.2 Présentation de données

Contrôle DataSource

• “source” des données à afficher

• SqlDataSource : un SGBD (SQL Server, …) • AccessDataSource : un fichier Access

• XmlDataSource : un fichier XML • ObjectDataSource : des objets (C#, VB, …)

Définition d’une SqlDataSource

• une connection string (~ chemin d’accès aux données) • 4 commandes SQL : SELECT, INSERT, DELETE, UPDATE

2.2 Présentation de données

Exemples

Exemple de DataSource

<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 [foo] ([nom], [age]) VALUES (?, ?)" UpdateCommand="UPDATE [foo] SET [age] = ? WHERE [nom] = ?"> </asp:SqlDataSource>

Exemple de GridView

<asp:GridView ID="GridView1" runat="server"

DataSourceID="SqlDataSource1" DataKeyNames="nom" AutoGenerateColumns="True"

AllowPaging="True" PageSize="4" AllowSorting="True"

AutoGenerateEditButton="true" AutoGenerateDeleteButton="true"> </asp:GridView> demo >>

2.2 Présentation de données

Contrôle GridView

Propriétés principales • ID • AllowPaging, AllowSorting • AutoGenerateColumns

• AutoGenerateDeleteButton (idem Edit, Select) • Rows : les lignes affichées dans le GridView • SelectedIndex : l'indice de la ligne sélectionnée

• ex. utilisation : GridView1.Rows[GridView1.SelectedIndex].Cells[0].Text

• EditIndex, PageIndex Événements principaux

• RowUpdating : juste avant de mettre à voir une ligne • RowUpdated : après avoir mis à jour une ligne

(9)

ASP.NET 33 Lionel Seinturier

2.2 Présentation de données

Contrôle DetailsView

• présentation sous forme de fiches

• même action que GridView (édition, suppression) • action supplémentaire : ajout

<asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="nom" AutoGenerateRows="true" AutoGenerateEditButton="True" AutoGenerateDeleteButton="True" AutoGenerateInsertButton="True" AllowPaging="True" > </asp:DetailsView>

ASP.NET 34 Lionel Seinturier

2.2 Présentation de données

Exemple

demo >>

2.3 Autres contrôles

Autre exemple de contrôle

Contrôle Login

• gérer les comptes utilisateurs sur un site • créer des comptes

• les stocker dans une base de données

• offrir un contenu différents selon que l’utilisateur est connecté ou non • Login : se connecter

• LoginStatus : affichage du statut (connecté/non connecté) • CreateUserWizard : création d’un nouvel utilisateur

• ChangePassword : changer le mot de passe du compte • PasswordRecovery : récupérer son mot de passe

2.3 Autres contrôles

Contrôle Login

Modification du fichier Web.Config

<configuration xmlns="http://schemas.microsoft.com/.NETConfiguration/v2.0"> <appSettings/> <connectionStrings> <remove name="LocalSqlServer"/> <add name="LocalSqlServer"

connectionString="Data Source= localhost;Initial Catalog=aspnetdb; Integrated Security=True" providerName="System.Data.SqlClient"/> </connectionStrings> <system.web> <authentication mode="Windows"/> <authentication mode="Forms"/>

La base de données dans laquelle vont être stockées les infos de login

(10)

ASP.NET 37 Lionel Seinturier

2.3 Autres contrôles

Contrôle Login

Modification du fichier Web.Config

Par défaut le contrôle Login impose des règles strictes de sécurité sur les mots de passe • au moins 7 caractères

• au moins 1 caractère non alphanumérique Ö possibilité de réduire ces exigences

ASP.NET 38 Lionel Seinturier

2.3 Autres contrôles

Contrôle Login

Modification du fichier Web.Config

<system.web> <authentication mode="Forms"/> <membership defaultProvider="MyMembershipProvider" > <providers> <add name="MyMembershipProvider" type="System.Web.Security.SqlMembershipProvider" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="1" passwordStrengthRegularExpression="" connectionStringName=" LocalSqlServer " /> </providers> </membership> </system.web> </configuration> La réf. sur la chaîne de connexion

2.3 Autres contrôles

Contrôle Login

Création de la base des utilisateurs

• programme aspnet_regsql.exe \WINDOWS\Microsoft.NET\Framework\v2.0.xxx Ö base SQL Server aspnetdb

• alternativement fichier XML

Rq: gestion des utilisateurs et des “membership provider” via le site web d’admin

2.4 Pagelet

Contrôles définis par l'utilisateur

• factorisation de code HTML et de scripts • fichier .ascx

<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>

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

public string Jour { // les propriétés de la pagelet get { return jour.Text; }

set { jour.Text=value; } }

/* idem Mois, Annee */ </script>

(11)

ASP.NET 41 Lionel Seinturier

2.4 Pagelet

Utilisation de pagelet

<%@ Register

TagPrefix le namespace XML choisi TagName le nom de la pagelet choisi Src l'URL pour accéder 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, System.EventArgs e) { Label.Text = JMA.Jour;

}

</script></body></html>

ASP.NET 42 Lionel Seinturier

2.4 Pagelet

Utilisation de pagelet

clic

2.4 Pagelet

Utilisation de pagelet

• chaque pagelet est compilée en une classe nompagelet_ascx (ex : Date_ascx) • instanciée lorsqu'on les utilise <foo:bar id="JMA" runat="server" />

Alternativement

• peut être instanciée par programme LoadControl("Date.ascx")

• ajoutée dynamiquement à une page

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

<form id="Frm" runat="server"> ...

2.4 Pagelet

Autre façon de définir des contrôles utilisateur

• étendre System.Web.UI.WebControls.WebControl

• redéfinir CreateChildControls

Avantage : le contrôle peut-etre défini à l'aide d'un DOM HTML Ö on ne se préoccupe pas d'écrire le code HTML

public class MyWebControl : WebControl {

protected override void CreateChildControls() { Table tbl = new Table();

TableRow row = new tableRow(); 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); } }

(12)

ASP.NET 45 Lionel Seinturier

Plan

1. Développement

2. Contrôles

2.1 Contrôles élémentaires

2.2 Présentation de données

2.3 Pagelet

3. Compléments sur l'API

ASP.NET 46 Lionel Seinturier

3. Compléments sur l'API

Les objets prédéfinis ASP.NET

Request la requête qui a provoqué le chargement

System.Web.HttpRequest

.Params les paramètres de la requêtes .RawUrl l'URL complète

.FilePath le chemin du fichier dans l'URL /foobar/c2/WebForm1.aspx

.PhysicalPath le chemin ϕ du fichier sur disque

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

.PhysicalApplicationPath la racine de l'application

c:\Inetput\wwwroot\foobar\

.Headers les en-têtes de la requête HTTP .UserHostName l'@ du client

.UserHostAddress l'IP du client

.UserLanguages les préférences du client en terme de langues .Cookies lecture d'un cookie

3. Compléments sur l'API

Les objets prédéfinis ASP.NET

Response la réponse à une requête

System.Web.HttpResponse

.ContentType le type MIME du contenu retourné au client (text/html, image/gif, …) .Cache gestion de la politique de cache de la réponse (date expiration) .SetCookie positionnement d'un cookie chez le client

3. Compléments sur l'API

Les objets prédéfinis ASP.NET

Session gestion d'une session client

System.Web.SessionState.HttpSessionState

Fonctionne comme une table de hachage indicée • Session["key"] = object

• object res = Session["key"] // null si la clé n'existe pas • object res = Session[int] le i-ème élément de la session • Session.Count le # d'éléments dans la session

• Session.GetEnumerator() un itérateur sur toutes les éléments de la session • Session.Remove("key")

• Session.RemoveAt(int) • Session.RemoveAll()

• Session créée lors de la 1ère visite d'un client (Session.IsNewSession vaut true) • Session.Timeout délai d'inactivité (en minutes) au delà duquel la session expire

(13)

ASP.NET 49 Lionel Seinturier

3. Compléments sur l'API

Les objets prédéfinis ASP.NET

Application espace de données partagé par tous les clients

System.Web.HttpApplicationState

Fonctionne comme une table de hachage indicée • Application["key"] = object

• object res = Application["key"] // null si la clé n'existe pas • object res = Application[int] le i-ème élément de la session • Application.Count le # d'éléments dans la session

• Application.GetEnumerator() un itérateur sur toutes les éléments de la session • Application.Remove("key")

• Application.RemoveAt(int) • Application.RemoveAll()

ASP.NET 50 Lionel Seinturier

3. Compléments sur l'API

Les objets prédéfinis ASP.NET

Cache espace de données partagé par tous les clients

≠ par rapport Application : peut avoir une durée de vie limitée

System.Web.Caching.Cache

Server informations sur le server

Références

Documents relatifs

Fait peut-être moins connu, l'absence de centralisation à Moscou de l'information inïra-oblast oblige, pour toute tentative de changement d'échelle, à collecter des données

La mise en place d’une politique des Pays dans la région Centre -que nous étudierons plus particulièrement dans le cadre du département du Cher à travers la constitution de deux Pays

Cela montre bien que la réussite d'une politique relevant du développement dépend de sa capacité à prendre en compte la manière dont les sociétés

Plus réaliste en termes d’exploitation, la première tranche (figure 4), inaugurée en 2000, comprend cinq grands hôtels, tous de marque internationale (un Mariott,

Dans leur célèbre ouvrage L’acteur et le système 6 , les sociologues Michel Crozier et Erhard Friedberg posent pourtant une question cruciale pour l’étude des politiques publiques

De 1888 à 1892 les relations entre le préfet et le maire, radical modéré, sont excellentes et elles s'établissent sur des affinités et des objectifs politiques très clairs

Le modèle américain de régulation indépendante a pendant longtemps été considéré comme doté d’une irréductible spécificité, en étant lié aux luttes de

Entretanto, orientações de manejo, como uso de sementes sadias; localização adequada dos viveiros; eliminação de cucurbitáceas próximas ao mamoeiro; eliminação de