Généralités
◼Programmation orienté objet
• Qu’est-ce qu’un objet?
✓ Variable d’un type spécifique appelé Classe
✓ Ou un représentant (instance) d’une classe
✓ Par exemple la BMW 320i est un objet de la classe Voiture
• Qu’est-ce qu’une classe?
✓ Type spécial (comme une structure) qui regroupe:
◼ Des données ou variables
◼ Des traitements (fonctions ou procédures) appelés méthodes
◼ Et d’autres éléments
✓ Par exemple la classe voiture contient des variables telles que
roues, portières et des méthodes : démarrer, rouler
ASSALE Adjé Louis Visual Studio C# 1
Généralités
◼Visual Studio
• Environnement de développement intégré orienté objet,
visuel (objets visibles) et événementiel
• Regroupe plusieurs langages dont VB - C# - C++ …
• Dispose d’un système de types communs (CTS)
• Chaque langage définit les alias pour chaque type du
CTS
• Projet base de développement est:
✓ d’unmodèle (application windows, web, …)
✓ composé plusieurs fichiers
ASSALE Adjé Louis Visual Studio C# 2
Visual Studio
◼Le langage C#
• Les types :alias des types de base de Visual Studio (CTS)
✓ correspondance entre chq type du CTS et l’alias en C#, ainsi
◼ [Link] donne object, [Link] → string, System.Int32 →
int, [Link] → byte, System.Int64 → long, [Link] → char,
[Link] → float, [Link] → double et [Link] →
bool pour ne citer que ceux-ci
✓ Conversion entre types
◼ la conversion entre les types simples char, int et float est implicite
◼ Conversion entre une chaine et les autres types est définie par :
◼ nombre→chaine [Link]()
◼ chaine→int ou long ou float ou double
{int|long|float|double}.Parse(chaine)
ASSALE Adjé Louis Visual Studio C# 3
Visual Studio
◼Le langage C#
• Déclaration de variables
✓ Syntaxe : <type> var1, var2, …;
◼ Exemple1 : int i, j, k;
◼ Exemple2 : const double PI = 3.14; déclaration de constante
✓ Tableaux
◼ <type> [] nomtableau : tableau à une dimension
◼ <type> [,…] nomtableau : tableau à plusieurs dimensions
◼ Création du tableau à l’aide du mot clé new : nomtableau = new type
[taille]
◼ Exemple : int [,,] entiers; entiers = new int[2,3,4];
◼ Tableaux imbriqués ou irréguliers : <type> [][] nomtableau
ASSALE Adjé Louis Visual Studio C# 4
Visual Studio
◼Le langage C#
• Déclaration de variables structures et énumérations
✓ Structure : struct <type> var1, var2, … {
<type1> <liste_de champs>;
<type2><liste_de_champs>;
…
}
✓ Énumération : enum <type> var1, var2, … {
valeur1,
valeur2,
…
}
ASSALE Adjé Louis Visual Studio C# 5
Visual Studio
◼Le langage C#
• Opérateurs et expressions
✓ Opérateur d’affectation =
◼ Affectation simple : i = 2;
◼ Raccourcis d’affectation op= : i=i/2; i/=2;
✓ Incrémentation/décrémentation : i++; ++i; --i; i--;
✓ Opérateurs logiques :
◼ == : égalité if(x == 2)
◼ <=, <, =>, > : opérateurs de comparaison
◼ !, &&, || : non, et, ou Ex (x!=y)
✓ Opérateurs sur les bits :
◼ ~, &, |, ^, <<, >> : non, et, ou, ou exclusif, décalage à gauche et droit
ASSALE Adjé Louis Visual Studio C# 6
Visual Studio
◼Le langage C#
• Opérateurs et expressions
✓ Autres type d’expressions
◼ Conditionnelle : ?: Exemple y = (x>0)?x-2:x+3;
◼ Taille d’une variable ou type : size Exemple sizeof(int) ou sizeof(x)
✓ Expressions simples et composées
◼ Expression simple se termine par un point virgule (;), Ex : i++; j=k-2;
◼ Expression composée commence par une accolade ouvrante et se
termine par une accolade fermante, peut contenir des déclarations, Ex :
{ int aux;
aux = i;
i = j;
j = aux;
}
ASSALE Adjé Louis Visual Studio C# 7
Visual Studio
◼Le langage C#
• Les instructions
✓ Sélection if
◼ syntaxe : if (<expression>)
<instruction>
[ else <instruction>]
◼ Exemple : if (i>0) i++; else i++;
✓ Sélection switch
◼ Syntaxe : switch (<expression>)
{case <expression constante>: <liste d'instructions>
…
[default : <liste d'instructions>]
}
ASSALE Adjé Louis Visual Studio C# 8
Visual Studio
◼Le langage C#
• Les instructions
✓ Sélection switch
◼ Exemple : char c;
switch (c)
{ case 'd' :
case 'c' : supprimer( ); break;
case 'i' : inserer( ); break;
case 'm' : modifier ( );break;
case 's' : sortir( ); break;
default : erreur();
}
◼ }
ASSALE Adjé Louis Visual Studio C# 9
Visual Studio
◼Le langage C#
• Les instructions
✓ répétition while
◼ Syntaxe : while (<expression>) corps ;
◼ Exemple : while (i<40) {
j = j+2;
i++; }
✓ Répétition do/while
◼ Syntaxe : do
corps
while (<expression>);
◼ Exemple : do i--; while(i);
ASSALE Adjé Louis Visual Studio C# 10
Visual Studio
◼Le langage C#
• Les instructions
✓ répétition for
◼ Syntaxe : for (initialisation ; expression ; pas) corps
◼ Exemple : for (i=0; i<n;i++) j=j*2;
✓ Répétition foreach
◼ Syntaxe : for (variable in expression) corps
◼ Exemple :
✓ De débranchements
◼ break : permet de sortir d’une répétition ou conditionnelle
◼ continue : permet de passer à l’itération suivante dans une répétition
◼ return expression : spécifie la valeur de retour
ASSALE Adjé Louis Visual Studio C# 11
Visual Studio
◼Le langage C#
• Les procédures et fonctions
✓ Syntaxe : <type> <nom_ss_programme>(liste_parametres)
corps
✓ Pour une procédure le type est nécessairement void et le corps
ne contient pas l’instruction return
✓ Exemple de fonction qui calcule la puissance n d’un réel :
◼ double power (int n, double x) {
double p = 1.0;
while(n--) p *= x;
return (p);
}
ASSALE Adjé Louis Visual Studio C# 12
Visual Studio
◼Le langage C#
• Notion de classe
✓ Syntaxe de déclaration :
◼ <modificateur> class <Nomclasse> {
<modificateur> <type> <nom_membre_simple> ;
…
<modificateur> <type> <nom_méthode>(<liste paramètres)
{ corps méthode} ;
…
}
✓ Membres d’une classe :
◼ Champs : variable contenant des valeurs les données de l’objet
◼ Méthode : procédure ou fonction opérant sur les champs
◼ Propriété : méthode qui donne l’impression d’être un champ
ASSALE Adjé Louis Visual Studio C# 13
Visual Studio
◼Le langage C#
• Notion de classe
✓ Membres d’une classe :
◼ Constante : champ contenant une valeur non modifiable
◼ Indexateur : membre permettant d’indexer un objet via des méthodes
Get et Set
◼ Événement : action, par exemple clic sur le bouton de la souris
◼ Opérateur : en C#, l’on peut surcharger des opérateurs
✓ Modificateurs applicables aux membres :
◼ public : membre accessible de l’extérieur (de partout)
◼ protected : membre inacessible de l’extérieur, exceptés les classes
dérivées
◼ private : accessible qu’aux membre de la même classe, valeur par défaut
ASSALE Adjé Louis Visual Studio C# 14
Visual Studio
◼Le langage C#
• Notion de classe
✓ Modificateurs applicables aux classes :
◼ public : classe visible par n’importe quel programme d’un autre espace
de nom
◼ protected : classe visible seulement par toutes les autres classes héritant
de la classe conteneur de cette classe
◼ private : classe visible uniquement par toutes les autres classes du
même espace de nom où elle est définie
◼ internal : classe visible uniquement par toutes les autres classes du
même assembly
◼ abstract : classe non instanciable, aucun objet ne peut être crée, ce
modificateur peut être associé à public, protected ou internal
◼ Sans mot clé : classe qualifiée de internal ou private si classe interne
ASSALE Adjé Louis Visual Studio C# 15
Visual Studio
◼Le langage C#
• Notion de classe
✓ Méthodes d’une classe :
◼ C’est des fonctions ou procédures définissant un code opérant sur les
données de l’objet
◼ Méthode Main : elle est unique, de statut publique et statique, elle sert
de point d’entrée dans l’application
◼ Constructeurs : méthodes spéciales qui portent le même nom que la
classe, ne retournent pas de valeur et permettent d’initialiser les donnés
de l’objet (création d’une instance)
◼ <classe> <nom_objet> = new <classe>(arguments du
constructeur)
◼ Membre statique (mot clé static) : définit le membre au niveau global et
non au niveau d’une instance; l’accès est [Link]
ASSALE Adjé Louis Visual Studio C# 16
Visual Studio
◼Le langage C#
• Notion de classe
✓ Méthodes et classes abstraites :
◼ On utilise le mot clé abstract pour définir une telle méthode ou classe
◼ Une méthode abstraite n’a pas de corps donc pas exécutable doit être
obligatoirement redéfinit dans une classe fille
◼ Si une classe qui contient au moins une méthode abstraite, elle doit être
déclarée abstraite. Une classe abstraite peut ne pas contenir du tout de
méthodes abstraites
◼ Une classe abstraite n’est pas instaciable, elle doit être dérivée
◼ Une classe dérivée qui ne redéfinit pas au moins une méthode abstraite
de la classe mère ou qui contient une méthode abstraite doit être
déclarée abstraite
ASSALE Adjé Louis Visual Studio C# 17
Visual Studio
◼Le langage C#
• Notion d’interface
✓ Syntaxe de déclaration
interface nomInterface {
//déclaration de méthode
type Methode1() ;
//déclaration de propriété
type Propriete { get ;}
//déclaration d’événement
event typeEvenement Evenement ;
//déclaration d’indexateur
type this[int indx] {get ; set ;}
}
ASSALE Adjé Louis Visual Studio C# 18
Visual Studio
◼Le langage C#
• Notion d’interface
✓ C’est un contrat qui peut contenir que des :
◼ propriétés, méthodes, indexateurs ou événements, pas de champ ni
d’attribut
◼ Ne contient pas de méthodes déjà implémentées, rien que les signatures
des propriétés et méthodes
◼ Tous les membres d’une interface sont automatiquement public
◼ On peut construire une hiérarchie d’interfaces
◼ Pour construire un objet à partir d’une interface, on crée une classe non
abstraite qui implémente tous les membres de l’interface.
ASSALE Adjé Louis Visual Studio C# 19
Visual Studio
◼Le langage C#
• Notion d’héritage
✓ Consiste à définir une classe en s’appuyant sur une autre classe
✓ Syntaxe : class ClasseDérivée : ClasseBase { … }
dans le corps de la classe dérivée, on peut ajouter des membres
comme modifier des membres
✓ C# ne gère pas l’héritage multiple de classe, mais autorise
l’héritage multiple d’interface :
class TotoTataTiti : Toto, Itata, Ititi {
…
} Toto est une classe, Itata et Ititi des interfaces
✓ Une classe scellée (modificateur sealed) ne peut être dérivée
ASSALE Adjé Louis Visual Studio C# 20
Visual Studio/[Link]
◼Application ASPNET vide
• Lancer Visual Studio et créer un nouveau projet de type
Application web [Link] nommer le Web_ASP
ASSALE Adjé Louis Visual Studio C# 21
Visual Studio/[Link]
◼Application ASPNET vide
• Le projet se présente comme suit:
- Références : donne la
liste des bibliothèques
de classe (dll)
utilisées par le projet
- [Link] : fichier
de configration du
projet ASP
ASSALE Adjé Louis Visual Studio C# 22
Visual Studio/[Link]
◼Page [Link]
• Création d’une page :
✓ On fait Projet/Ajouter un nouvel élément et on choisit Web
form
ASSALE Adjé Louis Visual Studio C# 23
Visual Studio/[Link]
◼Page [Link]
• Particularité de la page [Link]:
✓ C’est elle qui lancée par défaut si aucune page n’est précisée
✓ Elle contient des balise HTML et [Link]
✓ 2 fichiers sont générés à la création d’une page ASP
◼ <nom_page>.[Link] : contient le code de gestion des événements
provoqués par l’utilisation de la page
◼ <nom_page>.[Link] : contient la liste des composants
[Link] de la page; tout composant déposé sur la page donne
naissance à la déclaration du composant dans
<nom_page>.[Link]
◼ La classe <nom_page> définie dans les fichiers [Link] et
[Link] est la même à cause du mot clé partial
ASSALE Adjé Louis Visual Studio C# 24
Visual Studio/[Link]
◼Page [Link]
• Elle est vide au départ, on peut la construire :
✓ Visuellement :
◼ on utilise l’onglet Design
◼ on ajoute des composants à partir de la boite
à outils
✓ Manuellement :
◼ on utilise l’onglet source
◼ Ce qui donne accès au code source
◼ Ajouter «Gestion des étudiants» dans le body de
la page
✓ Exécuter le projet par Ctrl +F5
ASSALE Adjé Louis Visual Studio C# 25
Visual Studio/[Link]
◼Page [Link]
• On obtient ceci :
✓ Un numéro de port aléatoire est généré : ici 9926
ASSALE Adjé Louis Visual Studio C# 26
Visual Studio/[Link]
◼Page [Link]
• Le code source contient 2 types de balises:
1ère ligne :
-@page : page web
-Language : langage utilisé
-CodeBehind: fichier qui gère
événements
-inherits : nom de classe
définie dans fichier
Codebehind
-AutoEventWireUp="true"
✓ HTML classiques : <body>, <div> … liaison entre événement dans
✓ [Link] disposant de l’attribut fichier aspx et gestionnaire
runat="server" , traités par le serveur dans [Link] se fait par nom
avant envoi de la page
ASSALE Adjé Louis Visual Studio C# 27
Visual Studio/[Link]
◼Page [Link]
• Exercice :
✓ Modifier la page [Link] en y ajoutant des composants :
ASSALE Adjé Louis Visual Studio C# 28
Visual Studio/[Link]
◼Page [Link]
• Le fichier [Link] devient :
ASSALE Adjé Louis Visual Studio C# 29
Visual Studio/[Link]
◼Gestion des données d’une page
• Les événements d’une page :
✓ Événement Init qui engendre méthode Page_Init se produit
lorsque la page est initialisée
✓ Événement Load donne méthode Page_Load se produit quand
la page a été chargée par le serveur
✓ Tout autre événement qui se produit par l’action sur un
composant de la page (Exemple click sur un bouton)
N.B.: les événements se produisent dans cet ordre la
ASSALE Adjé Louis Visual Studio C# 30
Visual Studio/[Link]
◼Gestion des données d’une page
• Les événements d’une page :
✓ Modifier le fichier [Link] de sorte à afficher les
événements effectués lors de l’initialisation, chargement et
validation de la page
ASSALE Adjé Louis Visual Studio C# 31
Visual Studio/[Link]
◼Gestion des données d’une page
• Les événements d’une page :
✓ L’exécution donne ceci :
ASSALE Adjé Louis Visual Studio C# 32
Visual Studio/[Link]
◼Gestion des données d’une page
• Les événements d’une page :
✓ Demande initiale d’une page : GET
1 -1) demande de la page ASPX via commande
HTTP GET sans paramètres
HTML Page ASPX
2
-2) réponse flux HTML traduction de la page
ASPX demandée
✓ Traitement événement produit sur page affichée : POST
1
-1) lors d’événement sur page HTML, demande de l
page ASPX déjà acquise par GET se fait via HTTP
HTML Page ASPX POST avec paramètres (valeurs postées des
2
composants dans <form>)
N.B. : événement Init peut ne pas -2) réponse flux HTML traduction de la page ASPX
se produire lors d’un POST demandée ou autre page en cas de transfert/redirecti
ASSALE Adjé Louis Visual Studio C# 33
Visual Studio/[Link]
◼Gestion des données d’une page
• Les événements d’une page :
✓ Comparaison des résultats envoyés par un GET et un POST
ASSALE Adjé Louis Visual Studio C# 34
Visual Studio/[Link]
◼Gestion des données d’une page
• Les événements d’une page :
✓ Le ViewState mécanisme permettant de définir :
◼ Un champ caché <input type ="hidenn"name="__VIEWSTATE"
id="__VIEWSTATE" …>
◼ Dans lequel le serveur met toutes les valeurs codées des composants
◼ Le serveur le fait aussi bien pour le GET initial que pour les POST qui
suivent
◼ Les composants ont pour valeur après un POST :
◼ Soit la valeur postée, c’est-à-dire valeur du composant dans le
formulaire quand celui-ci a été posté au serveur
◼ Soit valeur donnée par le gestionnaire d’événements
◼ Ce qui fait qu’on a 4 valeurs dans le listBox au lieu de 2
◼ Le Viewstate peut être inhibé sur un composant 35
Visual Studio/[Link]
◼Gestion des données d’une page
• Les événements d’une page :
✓ Mettre la propriété EnableViewState du listBox à false – lancer
l’application – saisir un matricule et un nom puis valider
36
Visual Studio/[Link]
◼Gestion des données d’une page
• Les événements d’une page :
✓ Les composants ASPX obtiennent les valeurs à l’issue d’un
POST de la manière suivante :
◼ la page ASPX est instanciée. Les composants sont initialisés avec leurs
valeurs de conception
◼ la valeur _VIEWSTATE postée par le navigateur est utilisée pour donner
aux composants la valeur qu’ils avaient lorsque la page ASPX a été
envoyée au navigateur la fois précédente
◼ les valeurs postées par le navigateur sont affectées aux composants
◼ les gestionnaires d’événements sont exécutés. Ils peuvent modifier la
valeur de certains composants
ASSALE Adjé Louis Visual Studio C# 37
Visual Studio/[Link]
◼Gestion des données d’une page
• Les événements d’une page :
✓ Les valeurs postées
◼ Ajouter un Label à la page [Link] pour afficher les valeurs des
TextBox postées
◼ Et modifier le code du bouton Valider de la
manière suivante :
ASSALE Adjé Louis Visual Studio C# 38
Visual Studio/[Link]
◼Gestion des données d’une page
• Les événements d’une page :
✓ Les valeurs postées
◼ L’exécution donne ceci :
ASSALE Adjé Louis Visual Studio C# 39
Visual Studio/[Link]
◼Gestion des données d’une page
• Vérification de la validité des valeurs postées :
✓ 2 endroits où effectuer la vérification
◼ Sur le client : code écrit généralement en JavaScript
◼ Sur le serveur : à le faire toujours même si cela est fait coté client
✓ Les composant validateurs :
◼ RequieredFieldValidator : impose de saisir quelque chose dans le
champ; on renseigne propriété ErrorMessage et la propriété
ControleToValide par nom du champ à valider
◼ RangeValidator : spécifie intervalle de valeurs; on renseigne les
propriétés ErrorMessage, Type, MinimumValue, MaximumValue et
ControleToValide
ASSALE Adjé Louis Visual Studio C# 40
Visual Studio/[Link]
◼Gestion des données d’une page
• Vérification de la validité des valeurs postées :
✓ Configurer le composant qui provoque le POST, généralement
un bouton à travers propriété CausesValidation:
◼ Valeur par défaut true :
◼ Coté client : validateurs ayant EnableClientScript à true sont
exécutés; POST a lieu que si tous les validateurs réussissent
◼ Coté serveur : tous les validateurs sont exécutés; propriété
[Link] est true alors toutes les validations ont réussi
◼ CausesValidation à false :
◼ Coté client : aucun validateur n’est exécuté
◼ Coté serveur : le développeur demande l’exécution des validations
à l’aide de la méthode [Link]()
ASSALE Adjé Louis Visual Studio C# 41
Visual Studio/[Link]
◼Gestion des données d’une page
• Vérification de la validité des valeurs postées :
✓ Exercice : Mettre des composants validateurs
◼ Remplacer le champ Sexe par Age et mettre les composants validateurs
sur les champs Matricule, Nom et Age de la manière suivante :
◼ Contrôle validateur « RequieredFieldValidator » pour tous les
champs; renseigner propriété ErrorMessage par 'Données
obligatoires' et ControlToValide par le nom du champ à valider
◼ contrôle « RangeValidator » pour le champ Age; renseigner les
propriétés ErrorMessage par 'Tapez un nombre entre 1 et 120', Type
par Integer, MinimumValue par 1, MaximumValue par 120 et
ControlToValidate par le nom du champ
◼ Ajouter 2 labels : LabelErreurSaisie et LabelValidation
ASSALE Adjé Louis Visual Studio C# 42
Visual Studio/[Link]
◼Gestion des données d’une page
• Vérification de la validité des valeurs postées :
✓ Exercice : Mettre des composants validateurs
◼ Ajouter 2 labels : LabelErreurSaisie et LabelValidation
N.B. : ajouter le code ci-après dans la balise
configuration du fichier [Link]:
<appSettings>
<add
key="ValidationSettings:UnobtrusiveVali
dationMode" value="None" />
</appSettings>
Tester les cas où la propriété
«CausesValidation» du bouton Valider est à True
puis à False
ASSALE Adjé Louis Visual Studio C# 43
Visual Studio/[Link]
◼Gestion des données d’une page
• Données de portée Application :
✓ Données partagées par tous les utilisateurs de l’application web
✓ 3 fichiers sont utilisés pour la mise en œuvre
◼ [Link] : fichier de configuration de l’application
◼ [Link] et [Link] : permettent de définir classe globale
d’application dont durée de vie est celle de l’application. Elle définit les
données disponibles pour toutes les requêtes de tous les utilisateurs
Navigateur Serveur Web
Mémoire
-Mémoire application : données
1 Application en lecture seul accessibles à
HTML Page ASPX Mémoire
tous les utilisateurs
2
Session -Mémoire session : données en
lecture/écriture accessibles aux
requête successives d’un même
ASSALE Adjé Louis Visual Studio C# utilisateur 44
Visual Studio/[Link]
◼Gestion des données d’une page
• Données de portée Application :
✓ Exercice : Création de la classe Global Application
◼ On fait Projet/Ajouter un nouvel élément, Classe d’Application globale
Fichier [Link]
-@Application : pour application
-CodeBehind : [Link]
-Inherits : <nom_classe> de la
forme <nom_projet>.Global
-Language : langage ici C#
ASSALE Adjé Louis Visual Studio C# 45
Visual Studio/[Link]
◼Gestion des données d’une page
• Données de portée Application :
✓ La classe Global génère les squelettes des événements :
◼ Application_Start : démarre l’application
◼ Application_End : fin de l’application quand le serveur s’arrête ou
quand administrateur décharge l’application
◼ Session_Start : démarre une session client à l’arrivée de nouveau client
◼ Application_Error : apparition d’exception non gérée par le code de
l’application
◼ Application_BeginRequest : gère l’arrivée d’une nouvelle requête
◼ Application_AuthenticateRequest : se produit quand un utilisateur s’est
authentifié
ASSALE Adjé Louis Visual Studio C# 46
Visual Studio/[Link]
◼Gestion des données d’une page
• Données de portée Application :
✓ Exercice: ajout de balise au fichier de configuration [Link]
◼ La balise <appSettings> définit un dictionnaire d’informations de la
forme clé/valeur <appSettings>
<add key="cle1" value="valeur1"/>
<add key="cle2" value="valeur2"/>
</appSettings>
◼ La balise <connectionStrings> définit chaines de connexion à des B.D.
<connectionStrings>
<add connectionString="connexion1" name="conn1"/>
</connectionStrings>
◼ Fichier [Link] accessible via la classe ConfigurationManager de
[Link] :
[Link]["cle1"]
[Link]["conn1"].connectionString
ASSALE Adjé Louis Visual Studio C# 47
Visual Studio/[Link]
◼Gestion des données d’une page
• Données de portée Application :
✓ Exercice: Modifier la classe Global comme suit :
4 propriétés statiques
ont été définies dans la
classe Global
Récupération des
éléments des balises
<appSettings> et
<connectionStrings>
Visual Studio C# 48
Visual Studio/[Link]
◼Gestion des données d’une page
• Données de portée Application :
✓ Exercice: placer un Label pour afficher les éléments de la classe
Global et ajouter le code suivant au gestionnaire Page_Load
ASSALE Adjé Louis Visual Studio C# 49
Visual Studio/[Link]
◼Gestion des données d’une page
• Données de portée Application :
✓ Exercice: on obtient ceci
ASSALE Adjé Louis Visual Studio C# 50
Visual Studio/[Link]
◼Gestion des données d’une page
• Données de portée Session :
✓ Chaque utilisateur a sa propre mémoire appelée session :
Navigateur Serveur Web Mémoire
Application
Ici on mémorise les
1
Mémoire informations au fil des requêtes
HTML Page ASPX Utilisateur1
d’un utilisateur donné
2 Mémoire
Utilisateur2
◼ Les événements :
◼ Session_Start : démarre une session
◼ Session_End : met fin à une session
◼ Création d’une valeur de session dans Session_Start
Session["clé"] = valeur;
ASSALE Adjé Louis Visual Studio C# 51
Visual Studio/[Link]
◼Gestion des données d’une page
• Données de portée Session :
✓ Exercice : Comptage du nombre de fois qu’1 utilisateur clique
su le bouton Valider
◼ Ajout d’un Label dans la page [Link]
◼ Modification de la classe Global
◼ Utiliser session utilisateur
pour stocker compteur de requêtes dont clé est "nbRequetes"
◼ Mettre à jour le compteur dans le click du bouton Valider
ASSALE Adjé Louis Visual Studio C# 52
Visual Studio/[Link]
◼Gestion des données d’une page
• Données de portée Session :
✓ Exercice : l’exécution donne ceci
ASSALE Adjé Louis Visual Studio C# 53
Visual Studio/[Link]
◼Gestion de la page
• GET/POST dans le chargement d’une page
✓ La méthode Page_Load
◼ Est exécutée que se soit une demande GET ou POST
◼ Lors du GET, elle initialise la page envoyée au navigateur du client. Par
mécanisme de VIEWSTATE, page reste initialisée et n’est modifiée que
par des demandes POST. Il n’y a pas lieu de réinitialiser la page dans
Page_Load.
◼ D’où le besoin de cette méthode de savoir si la requête du client est un
GET (la première) ou un POST (les suivantes)
✓ Exercice :
◼ Ajout d’une liste déroulante (champ Sexe) à la page [Link] dont
le contenu sera défini dans le gestionnaire Page_Load de la requête
GET
ASSALE Adjé Louis Visual Studio C# 54
Visual Studio/[Link]
◼Gestion de la page
• GET/POST dans le chargement d’une page
✓ Exercice :
◼ La liste est déclarée comme suit
dans [Link]
protected global::[Link] DropDownListSexes;
◼ La classe DropDownList dispose des propriétés P suivantes :
ASSALE Adjé Louis Visual Studio C# 55
Visual Studio/[Link]
◼Gestion de la page
• GET/POST dans le chargement d’une page
✓ La classe DropDownList :
◼ La classe ListItem des éléments d’une liste déroulante sert à générer des
balises <option> de la balise HTML <select>
<select ….>
<option value="val1"> texte1</option>
<option value="val2">texte2</option>
….
◼ Dans la balise <option> </select>
◼ textei est le texte affiché dans la liste déroulante
◼ vali est la valeur postée par le navigateur si textei est le texte
sélectionné dans la liste déroulante
◼ Chaque option peut être générée par le constructeur
ListItem(string texte, string value) 56
Visual Studio/[Link]
◼Gestion de la page
• GET/POST dans le chargement d’une page
✓ Exercice : La classe DropDownList
◼ Ajouter le code suivant à Page_Load
◼L’attribut de Page IsPostBack renvoie vrai si la requête de
l’utilisateur est un POST
◼ Modifier le Click du bouton Valider comme suit :
◼ Propriété SelectedValue donne la valeur postée d’1 liste déroulante
ASSALE Adjé Louis Visual Studio C# 57
Visual Studio/[Link]
◼Gestion de la page
• GET/POST dans le chargement d’une page
✓ Exercice : La classe DropDownList
◼ L’exécution donne :
ASSALE Adjé Louis Visual Studio C# 58
Visual Studio/[Link]
◼Gestion de la page
• Forward d’une page vers une autre
✓ Requête traitée par 2 pages ASPX successives
Transmission d’informations de la page
[Link] vers [Link] via une
mémoire appelée mémoire de requête
✓ Exercice :
◼ Ajouter une page [Link] au projet :
◼ Avec un Label pour afficher information transmise par [Link]
◼ Un lien HTML vers la page [Link]. Lorsqu’on clique sur ce
lien page Default chargée via opération GET comme si l’on avait
tapé directement son url dans son navigateur (propriété
NavigateURL)
ASSALE Adjé Louis Visual Studio C# 59
Visual Studio/[Link]
◼Gestion de la page
• Forward d’une page vers une autre
✓ Exercice :
◼ Ajouter un composant de type LinkButton
avec Id LinkButtonToPage1 à [Link]
◼ Avec code source suivant :
ASSALE Adjé Louis Visual Studio C# 60
Visual Studio/[Link]
◼Gestion de la page
• Forward d’une page vers une autre
✓ Exercice :
◼ Saisir le code suivant pour le Click du LinkButton
◼ Méthode [Link] fait passer la requête à [Link]. Le 2nd
paramètre à true indique qu’il faut passer à [Link] toute
information qui a été envoyé à [Link] lors d’1 POST
◼ Accès au contexte de la requête via propriété Context de la classe
Page qui sert de mémoire entre les différentes pages
◼ Lorsque Page1 est chargée par [Link]("[Link]", true),
tout se passe comme si Page1 avait été appelé par un GET d’1
61
navigateur
Visual Studio/[Link]
◼Gestion de la page
• Forward d’une page vers une autre
✓ Exercice :
◼ Saisir le code suivant pour le Click du LinkButton
◼ Le gestionnaire Page_Load de [Link] est exécuté
normalement. On l’utilisera pour afficher le message mis par
[Link] dans le contexte de la requête
ASSALE Adjé Louis Visual Studio C# 62
Visual Studio/[Link]
◼Gestion de la page
• Forward d’une page vers une autre
✓ Exercice : l’exécution donne
◼
N.B. : les url des 2
pages sont identiques
ASSALE Adjé Louis Visual Studio C# 63
Visual Studio/[Link]
◼Gestion de la page
• Redirection d’une page vers une autre
✓ 2 requêtes distinctes du navigateur
◼
L’utilisateur demande la page
[Link] par un POST, et reçoit en
réponse une autre page [Link]
◼ En 1, le navigateur fait requête POST à la page [Link]. Celle-ci
traite la requête et envoie une réponse (simple flux HTTP) demandant
au navigateur de se rediriger vers une autre Url [Link]
◼ En 2, le navigateur fait une requête GET à la page [Link]. Celle-ci
est alors envoyée en réponse au navigateur
◼ [Link] ne peut transmettre des informations à [Link] que via
64
la session de l’utilisateur. Le contexte n’est pas utilisable ici
Visual Studio/[Link]
◼Gestion de la page
• Redirection d’une page vers une autre
✓ Exercice :
◼ Ajouter une page [Link] et 1 composant LinkButton à [Link]
pour rediriger l’utilisateur vers [Link]
◼ Le code source de [Link] est identique à celui de [Link]
ASSALE Adjé Louis Visual Studio C# 65
Visual Studio/[Link]
◼Gestion de la page
• Redirection d’une page vers une autre
✓ Exercice :
◼ Ajouter une page [Link] et 1 composant LinkButton
◼ Code source du composant LinkButton
◼ Le gestionnaire LinkButtonToPage2_Click assure la redirection
vers [Link]
- On met un message dans la session
de l’utilisateur
- L’objet Response utilise la
méthode Redirect pour donner un
ordre HTTP de redirection
ASSALE Adjé Louis Visual Studio C# 66
Visual Studio/[Link]
◼Gestion de la page
• Redirection d’une page vers une autre
✓ Exercice :
◼ Lors de la redirection vers [Link] un GET sera fait sur cette page
◼ La méthode Page_Load va s’exécuter, on l’utilisera pour récupérer
le message mis par [Link]
ASSALE Adjé Louis Visual Studio C# 67
Visual Studio/[Link]
◼Gestion de la page
• Redirection d’une page vers une autre
✓ Exercice : l’exécution donne
N.B. : les 2 url sont
différentes
ASSALE Adjé Louis Visual Studio C# 68
Visual Studio/[Link]
◼Application avec page maitre
• Création de la page maitre
✓ Exercice :
◼ Créer un nouveau projet Web [Link] vide
◼ Ajouter une Page Maitre au projet
Directive
@Master =>
page Maitre
ASSALE Adjé Louis Visual Studio C# 69
Visual Studio/[Link]
◼Application avec page maitre
• Création de la page maitre
✓ Exercice : construire la page
◼ Enlever les conteneurs (balise <asp:ContentPlaceHolder>)
◼ Donner un titre « Page Maitre » à la Page
◼ Insérer une table HTML à 3 lignes et 3 colonnes via balise <table>
◼ Construire à partir de là un tableau à 3 lignes et
2 colonnes
◼ Supprimer une colonne par click droit sur la
colonne puis Supprimer/supprimer les colonnes
ASSALE Adjé Louis Visual Studio C# 70
Visual Studio/[Link]
◼Application avec page maitre
• Création de la page maitre
✓ Exercice : construire la page
◼ Fusionner les cellules de la 1ère et 3ème ligne : sélectionner les cellules à
fusionner puis click droit puis Modifier/Fusionner les cellules
◼ Augmenter la largeur de la cellule (2,1)
◼ Donner à chaque cellule une couleur de fond pour les différencier :
propriété style catégorie Arrière-plan
ASSALE Adjé Louis Visual Studio C# 71
Visual Studio/[Link]
◼Application avec page maitre
• Création de la page maitre
✓ Exercice : construire la page
◼ Pour permettre les pages ASPX Esclaves de s’afficher dans la cellule
(2,2), placer dans la cellule un conteneur : sélectionner la cellule puis
faire boite à outils/Standard/ContentPlaceHolder
ASSALE Adjé Louis Visual Studio C# 72
Visual Studio/[Link]
◼Application avec page maitre
• Création des pages esclaves
✓ Exercice : construire la page esclave
◼ Faire Projet/Nouvel élément puis choisir Web form avec page maitre
◼ Donner un nom à page ([Link]) et choisir la page maitre associée
ASSALE Adjé Louis Visual Studio C# 73
Visual Studio/[Link]
◼Application avec page maitre
• Création des pages esclaves
✓ Exercice : construire la page esclave
◼ La balise <asp:Content> sert à insérer du code ASP/HTML dans un des
conteneurs de la page maître désigné par l’attribut ContentPlaceHolderID
dont la valeur doit être l’ID d’1 des conteneurs de la page maitre
◼ En mode design, la [Link] est la suivante
N.B. : on ne peut déposer des composants que dans le conteneur ContentPlaceHolder1 74
Visual Studio/[Link]
◼Application avec page maitre
• Création de composant Menu
✓ Exercice :
◼ Pour naviguer entre les pages [Link], [Link] et [Link]
◼ Créer un composant Menu dans la cellule (2,1) de la page Maitre
◼ Faire boite à outils/Navigation/Menu
Le menu peut être alimenté par une
source de données statique ou
dynamique
ASSALE Adjé Louis Visual Studio C# 75
Visual Studio/[Link]
◼Application avec page maitre
• Création de composant Menu
✓ Exercice :
◼ Créer une source statique pour naviguer entre les pages
◼ Dans propriété DataSourceId du composant Menu, choisir
<Nouvelle source de données>, puis choisir Plan de site
ASSALE Adjé Louis Visual Studio C# 76
Visual Studio/[Link]
◼Application avec page maitre
• Création de composant Menu
✓ Exercice : Créer source statique
◼ Le composant SiteMap est un intermédiaire entre le Menu et un fichier
XML qui liste les options de Menu : fichier [Link]
◼ Ajouter un fichier [Link] : Projet/Ajouter Nouvel élément
puis choisir Plan de site
ASSALE Adjé Louis Visual Studio C# 77
Visual Studio/[Link]
◼Application avec page maitre
• Création de composant Menu
✓ Exercice : Créer source statique
◼ balise <siteMapNode> définit option de menu, l’imbrication de balise
reflète l’imbrication des options de menu; elle a 2 attributs obligatoires
◼ title : libellé de l’option de menu
◼ url : url de la page vers laquelle on doit naviguer qd option choisie
◼ Modifier le fichier [Link] de la manière suivante :
ASSALE Adjé Louis Visual Studio C# 78
Visual Studio/[Link]
◼Application avec page maitre
• Création de composant Menu
✓ Exercice : Créer source statique
◼ Définir la propriété StartingNodeUrl du composant Menu avec la page
de démarrage [Link]
N.B. : si erreur, remplacer la ligne d’erreur par <remove name="MySqlSiteMapProvider"/>
dans fichier C:\Windows\[Link]\Framework\v4.0.30319\Config\[Link]
ASSALE Adjé Louis Visual Studio C# 79
Visual Studio/[Link]
◼Application avec page maitre
• Affinement des pages esclaves
✓ Exercice : Ajout de liens de navigation dans Page1 et Page2
◼ Pour [Link] Les pages esclaves peuvent être
aussi complexes qu’on le souhaite
Code source de [Link]
ASSALE Adjé Louis Visual Studio C# 80
Visual Studio/[Link]
◼Application avec page maitre
• Affinement des pages esclaves
✓ Exercice : Ajout de liens de navigation dans Page1 et Page2
◼ Pour [Link] Code de contrôle pour la [Link]
ASSALE Adjé Louis Visual Studio C# 81
Visual Studio/[Link]
◼Application avec page maitre
• Affinement des pages esclaves
✓ Exercice : Ajout de liens de navigation dans Page1 et Page2
◼ Pour [Link]
Les pages esclaves peuvent être
aussi complexes qu’on le souhaite
Code source de la [Link]
ASSALE Adjé Louis Visual Studio C# 82
Visual Studio/[Link]
◼Application avec page maitre
• Affinement des pages esclaves
✓ Exercice : Ajout de liens de navigation dans Page1 et Page2
◼ Pour [Link] Code de contrôle pour la [Link]
ASSALE Adjé Louis Visual Studio C# 83
Visual Studio/[Link]
◼L’accès aux bases de données
• La base de données
✓ Exercice : créer dans MySQL le schéma suivant:
◼ Créer une base de données « mabase » et créer les tables suivantes :
Classe(Code_cl, Intitulé, Effectif)
Etudiant(Matricule, Nom Prénoms, Sexe, Code_cl#)
Livre(Code_liv, titre, auteur, Genre, Prix)
Emprunt(Matricule#, Code_liv#, Sortie, Retour)
ASSALE Adjé Louis Visual Studio C# 84
Visual Studio/[Link]
◼L’accès aux bases de données
• Connexion à la base de données
✓ Exercice : créer une application web ASP vide
◼ Ajouter une référence à la dll de MySQL
◼ Faire click droit sur référence puis
ajouter une référence, dans gestionnaire
de références choisir [Link]
ASSALE Adjé Louis Visual Studio C# 85
Visual Studio/[Link]
◼L’accès aux bases de données
• Connexion à la base de données
✓ Exercice : ajouter une page [Link] pour la connexion
◼ Ajouter la page [Link] et la construire comme suit :
ASSALE Adjé Louis Visual Studio C# 86
Visual Studio/[Link]
◼L’accès aux bases de données
• Connexion à la base de données
✓ Exercice : ajouter une page [Link] pour la connexion
◼ Le click sur Connexion provoque l’une des 2 choses :
◼ Informations saisies valides, redirection vers la page Gest_Biblio
◼ Sinon message d’erreur s’affiche « connexion pas réussie »
◼ Ajouter une page Gest_Biblio.aspx comme suit :
Code de chargement de la page
ASSALE Adjé Louis Visual Studio C# 87
Visual Studio/[Link]
◼L’accès aux bases de données
• Connexion à la base de données
✓ Exercice : code du Click de Connexion
ASSALE Adjé Louis Visual Studio C# 88
Visual Studio/[Link]
◼L’accès aux bases de données
• Connexion à la base de données
✓ Exercice : l’exécution donne
ASSALE Adjé Louis Visual Studio C# 89
Visual Studio/[Link]
◼L’accès aux bases de données
• Accès aux données
✓ Exercice : Gestion des classes
◼ Le click sur le lien « Gestion des classes » redirige vers page Gest_clas
◼ Ajouter une page Gest_clas.aspx et la construire comme suit :
Code de chargement de la page
protected void Page_Load(object sender,
EventArgs e)
{
[Link] = Session["Nom"] + " :
soit la bienvenue dans la gestion des
classes" as string;
}
ASSALE Adjé Louis Visual Studio C# 90
Visual Studio/[Link]
◼L’accès aux bases de données
• Accès aux données
✓ Exercice : Gestion des classes
◼ Code du click des boutons Rechercher et Ajouter
protected void But_Rech_Click(object sender, EventArgs e)
{
if (TextBoxCode_cl.Text == "")
[Link] = "Veuillez entrer un code classe";
else
{
MySqlConnection lacon = new
MySqlConnection(Session["Lachaine"].ToString());
string larequete = "select * from classe where code_cl='" +
TextBoxCode_cl.Text + "'";
ASSALE Adjé Louis Visual Studio C# 91
Visual Studio/[Link]
◼L’accès aux bases de données
• Accès aux données
✓ Exercice : Gestion des classes
◼ Code du click des boutons Rechercher et Ajouter
try {
[Link]();
MySqlCommand lacomd = new MySqlCommand(larequete, lacon);
MySqlDataReader ledata = [Link]();
if ([Link]())
{
TextBoxCode_cl.Text = [Link](0);
[Link] = [Link](1);
[Link] = ledata.GetUInt32(2).ToString();
[Link] = "Donnees trouvees";
}
ASSALE Adjé Louis Visual Studio C# 92
Visual Studio/[Link]
◼L’accès aux bases de données
• Accès aux données
✓ Exercice : Gestion des classes
◼ Code du click des boutons Rechercher et Ajouter
else
[Link] = "Donnees non trouvees";
}
catch (Exception ex)
{
[Link] = " erreur : " + [Link];
}
}
}
ASSALE Adjé Louis Visual Studio C# 93
Visual Studio/[Link]
◼L’accès aux bases de données
• Accès aux données
✓ Exercice : Gestion des classes
◼ Code du click des boutons Rechercher et Ajouter
protected void But_Ajout_Click(object sender, EventArgs e)
{
MySqlConnection lacon = new
MySqlConnection(Session["Lachaine"].ToString());
string larequete = "insert into classe values('" +
TextBoxCode_cl.Text + "','"+ [Link] +
"',"+ [Link]([Link]) +")";
try {
[Link]();
MySqlCommand lacomd = new MySqlCommand(larequete, lacon);
int nbre = [Link]();
[Link] = "Donnees inserees";
} 94
Visual Studio/[Link]
◼L’accès aux bases de données
• Accès aux données
✓ Exercice : Gestion des classes
◼ Code du click des boutons Rechercher et Ajouter
catch (Exception ex) {
[Link] = "Donnees non inserees : " + [Link];
}
}
ASSALE Adjé Louis Visual Studio C# 95
Visual Studio/[Link]
◼L’accès aux bases de données
• Accès aux données
✓ Exercice : Gestion des étudiants
◼ Créer la page Gest_etud.aspx pour la gestion des étudiants avec une
liste déroulante pour le code classe
ASSALE Adjé Louis Visual Studio C# 96
Visual Studio/[Link]
◼L’accès aux bases de données
• Accès aux données
✓ Exercice : Gestion des étudiants
protected void Page_Load(object sender, EventArgs e)
{ Code de chargement de la page
if (![Link]) {
// on insere les sexes
[Link](new ListItem("M", "M"));
[Link](new ListItem("F", "F"));
//on se connecte a la base
MySqlConnection lacon = new MySqlConnection(Session["Lachaine"].ToString());
string larequete = "select code_cl from classe";
try {
[Link]();
MySqlCommand lacomd = new MySqlCommand(larequete, lacon);
MySqlDataReader ledata = [Link]();
while ([Link]()) {
[Link](new ListItem([Link](0), [Link](0))); }
} catch (Exception ex) {
[Link] = "Erreur : " + [Link]; }
} 97
}
Visual Studio/[Link]
◼Travaux Pratiques
• Terminer le projet
98