Les grandes lignes de la programmation en ASP.NET 2.0


précédentsommairesuivant

V. Gestion de l'état

Il y a maintes manières d'implémenter l'état conversationnel dans une application web mais, ici, nous allons parler seulement des plus fréquents.

a. Champs cachés

Ces champs sont caractérisés par leur nom et leur valeur de type String. Ces champs n'existent pas à l'appel de la page, il est donc nécessaire de ne pas oublier certains tests de validité.

b. ViewState

Comme dit lors du premier exemple de page aspx, le ViewState, nouveau concept introduit par Microsoft avec ASP.NET, représente l'état de l'ensemble des contrôles d'un page. Les informations sont sauvées sous forme d'un flux sérialisé dans la page HTML et le champ caché _VIEWSTATE permet le transit de ces informations entre le client et le serveur.
Il peut être désactivé au niveau d'un contrôle, au niveau d'une page ou au niveau d'une application en plaçant la propriété EnabledViewState à False.

Le plus intéressant est que le programmeur peut y ajouter ses propres informations sous forme d'objets indexés par une clé de type String.

Pour sauvegarder et lire une information, voici comment utiliser le ViewState, par exemple pour modifier un argument dans une requête de sélection :

 
Sélectionnez

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
	If Not IsPostBack Then
		ViewState("tri") = "nom"
		ConstruireRequete()
	End If
End Sub

Private Sub ConstruireRequete   
    Dim tri As String = CType(ViewState("tri"), String)
    Dim rq As String = "SELECT * FROM UneTable ORDER BY " & tri
End Sub

Protected Sub cmdLocalite_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles cmdLocalite.Click
	ViewState("tri") = "localite"
	ConstruireRequete()
End Sub

c. Cookies

Un petit mot que tous les internautes connaissent mais, probablement, ne savent pas exactement à quoi il fait référence.
Pour des exemples de création et d'exploitation de cookies, voici les références dans la FAQ ASP.NET (version VB.NET) :

d. Variable de session

"Session" est un objet qui s'utilise un peu comme le ViewState, c'est-à-dire avec une clé mais se comporte plutôt comme une table de hachage.

Prenons deux pages aspx :
page1.aspx : page dans laquelle nous encodons, par l'intermédiaire d'une TextBox, un nom de société
page2.aspx : page dans laquelle nous affichons le nom de la société (vous comprenez que le but est d'avoir une page d'affichage de données de société se trouvant par exemple dans une base de données)

 
Sélectionnez

Protected Sub cmdAfficheSoc (Byval sender As Object, ByVal e As System.EventArgs) Handles cmdAfficheSoc.Click
	Session("NomSoc") = txtNomSoc.Text
	Response.Redirect("page2.aspx")
End Sub

Code de la page1.aspx : L'utilisateur introduit un nom de société dans la TextBox nommée "txtNomSoc". Cette information est sauvée en Session avant de passer à la page2.aspx

 
Sélectionnez

Protected Sub Page_Load (Byval sender As Object, ByVal e As System.EventArgs) Handles Me.Load
	If Session("NomSoc") IsNot Nothing Then
		lblNomSoc.Text = CType(Session("NomSoc"), String)
	Else
		Response.Write("Aucune société n'a été choisie !")
	End If
End Sub

Code de la page2.aspx : Un test est effectué pour savoir si la variable de session contient bien une donnée. Celle-ci est affichée en passant par un transtypage.


Il est évident que cet exemple est très simpliste et que l'objet Session permet bien d'autres utilisations. Voici quelques points liés à l'objet Session (liste non exhaustive) :

  • Initialisation de l'objet Session : événements Session_Start et Session_End déclenchés par le serveur et accessibles via le fichier Global.asax pour le programmeur
  • Expiration de la session
  • Session avec ou sans cookies
  • Session sécurisée

Pour des informations complémentaires, profitez et abusez de la FAQ ASP.NET (VB.NET).

e. Variable d'application

La grande différence avec l'objet Session se situe dans le fait qu'un objet Application conserve des données pour l'ensemble des utilisateurs d'un même site web. Il s'utilise de la même manière que l'objet Session.

 
Sélectionnez

Protected Sub Page_Load (Byval sender As Object, ByVal e As System.EventArgs) Handles Me.Load
	Dim cpt As Integer = 0
	Application.Lock()
	If Application("Compteur") IsNot Nothing Then
		cpt = CType(Application("Compteur"), Integer)
	End If
	cpt = cpt + 1

	
	Application("Compteur") = cpt
	Application.UnLock()
	lblVisite.Text = "Page vue : " & cpt & " fois."
End Sub

L'objet Application étant commun à tous les utilisateurs du site (rappelez-vous le schéma précédent), il est préférable de bloquer l'accès lors de l'écriture et, bien entendu, de ne pas oublier l'action inverse.
Comme toujours, vous trouverez aussi des exemples et explications dans la faq asp.net, par exemple :
Nécessité de bloquer les variables d'application

f. L'objet Cache

Comme l'objet Application, il conserve aussi des données accessibles à tous les utilisateurs mais il possède quelques avantages non négligeables :

  • gestion interne de locking
  • plus rapide
  • gestion des dépendances

En ce qui concerne les dépendances, on peut en citer quelques-unes très succintement car ce genre de programmation demanderait presque un tutoriel à elle toute seule !

  • dépendances de temps : permet de faire expirer automatiquement une donnée à une date/heure absolue
  • dépendances fichiers : le serveur d'application peut mettre à jour des données lorsque cells-ci sont modifiées dans le fichier associé
  • dépendances SQL : sous SqlServer 2000 et 2005. Agit de la même manière avec une base de données grâce au "poling" (interrogation du serveur vers la BD).
  • le callback : association d'une procédure qui est rappelée, non pas dès que la donnée est supprimée mais à la prochaine exécution de la page qui contient la procédure

g. Caching (ou cache HTML)

Un autre aspect de la mise en cache des données suivant diverses méthodes. Ici aussi, il serait trop long d'étendre leur mode d'utilisation.

  • cache de sortie (output cache) : prend un "copie" instantanée du flux HTML puis supplante toute action de requête en imposant sa "copie" gardée en cache
  • substitution : ce contrôle permet de ne pas mettre en cache une partie de la page même si le cache est activé
  • profils de cache : peuvent être créés dans le Web.Config et associé par leur nom aux pages qui en ont besoin
  • fragments de cache : fonctionne comme le cache de sortie mais donne la possibilité au programmeur de ne mettre en cache qu'une partie de la page HTML. Le frament caching peut se faire grâce aux usercontrols qui disposent eux-mêmes d'une directive Output

h. QueryString

ou "chaîne de requête". Permet de faire passer des informations via l'URI d'une page à une autre.
En reprenant l'exemple d'un ID de société sélectionné dans une page dont les données sont présentées dans une autre page, on aurait très bien pu indiquer cet ID via l'URI lors de l'appel à la deuxième page.

Vous avez choisi la société ayant un ID = 1235, voici comment passer l'identifiant à la page suivante :

 
Sélectionnez

<A href="page2.aspx?idsoc=1235"></A>

Pour récupérer l'ID dans la seconde page, il vous suffira de coder comme suit :

 
Sélectionnez

<p>Vous avez choisi la société : & Request.QueryString("idsoc")</p>

Vous comprenez maintenant le pourquoi de certaines url complexes du genre :
http://www.monsite.com/repertoire/liste.asp?id=1257&lng=fr&action=del&email=abc@prov.fr


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2007 Cécile Muno. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.