Hypertext Transfer Protocol (HTTP) est un protocole sans état. Lorsque le client se déconnecte du serveur, le moteur ASP.NET supprime l'objet page. De cette façon, chaque application Web peut évoluer pour répondre à un grand nombre de requêtes simultanément sans épuiser la mémoire du serveur.
Cependant, une certaine technique est nécessaire pour stocker les informations entre les requêtes et les récupérer en cas de besoin. Ces informations sont appelées état, qui correspond aux valeurs actuelles de tous les contrôles et variables utilisés par l'utilisateur actuel dans la session en cours.
ASP.NET gère quatre états :
afficher l'état
état de contrôle
état de la session
Statut de la demande
L'état d'affichage est l'état de la page et de tous ses contrôles. Il reste inchangé grâce aux commentaires du framework ASP.NET.
Lorsqu'une page est renvoyée au client, les propriétés et les contrôles de ces modifications de page sont déterminés et stockés dans la valeur d'un champ de saisie masqué nommé _VIEWSTATE. Lorsque la page est à nouveau publiée, le champ _VIEWSTATE est envoyé au serveur avec la requête HTTP.
L'état d'affichage peut être activé ou désactivé pour :
Application entière : définissez la propriété EnableViewState de la section dans le fichier web.config.
Une page : définissez la propriété EnableViewState de la commande page sur <%@ Page Language="C#" EnableViewState="false" %>
Un contrôle : définissez la propriété control.EnableViewState.
Pour ce faire, il utilise un objet d'état d'affichage, qui est défini par une classe StateBag définie par un ensemble d'éléments d'état d'affichage. Le StateBag est une structure de données qui contient des paires de valeurs de propriété et est stockée sous forme de chaîne associée à un objet.
La classe StateBag possède les propriétés suivantes :
propriété | décrire |
---|---|
Article (nom) | La valeur de l'état d'affichage avec le nom spécifié, qui est la propriété par défaut du StateBag. |
Compter | Le nom de l'élément dans la collection de statuts. |
Clés | Une collection de clés pour tous les éléments de la collection. |
Valeurs | La collection de valeurs pour tous les éléments de la collection. |
La classe StateBag possède les méthodes suivantes :
méthode | décrire |
---|---|
Ajouter(nom, valeur) | Ajoute un élément à la collection viewstate, mettant à jour les éléments existants. |
Clair | Supprime tous les éléments de la collection. |
Égal à (Objet) | Détermine si l'objet spécifié est égal à l'objet actuel. |
Finaliser | Permet de libérer des ressources et d'effectuer d'autres opérations de nettoyage. |
ObtenirEnumérateur | Renvoie un compteur de paires clé/valeur pour les objets StateItem en double stockés dans l'objet StateBag. |
ObtenirType | Obtenez le type de l'instance actuelle. |
EstItemDirty | Vérifiez l'objet stocké dans le StateBag pour confirmer s'il a été modifié. |
Supprimer(nom) | Supprimez les éléments personnalisés. |
DéfinirDirty | Définit l'état de l'objet StateBag et la propriété Dirty de chaque objet StateItem contenu. |
SetItemDirty | Définit la propriété Dirty pour l'objet StateItem spécifié dans l'objet StateBag. |
VersChaîne | Renvoie une chaîne représentant l'objet du package d'état. |
L'exemple suivant illustre le concept de chaînes qui stockent l'état d'affichage.
Gardons un compteur qui peut être incrémenté à chaque fois que la page est rappelée en cliquant sur un bouton de la page. Le contrôle label affiche la valeur du compteur.
Le code du fichier de balises ressemble à ceci :
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="statedemo._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <h3>View State demo</h3> Page Counter: <asp:Label ID="lblCounter" runat="server" /> <asp:Button ID="btnIncrement" runat="server" Text="Add Count" onclick="btnIncrement_Click" /> </div> </form> </body></html>
Le fichier de code-behind pour cette instance ressemble à ceci :
public partial class _Default : System.Web.UI.Page{ public int counter { get { if (ViewState["pcounter"] != null) { return ((int)ViewState["pcounter"]); } else { return 0; } } set { ViewState["pcounter"] = value; } } protected void Page_Load(object sender, EventArgs e) { lblCounter.Text = counter.ToString(); counter++; }}
Il produira les résultats suivants :
L’état du contrôle ne peut pas être directement modifié, accessible ou désactivé.
Lorsqu'un utilisateur se connecte à un site Web ASP.NET, un nouvel objet de session est créé. Lorsque l'état de session est activé, un nouvel état de session est créé pour chaque nouvelle demande. Cet objet d'état de session fait partie de l'environnement d'exécution et est disponible via la page.
L'état de session est généralement utilisé pour stocker des données d'application telles que l'inventaire, les listes de fournisseurs, les enregistrements clients ou les paniers d'achat. Il peut stocker les informations de l'utilisateur et ses informations de préférence, et enregistrer les chemins indécis de l'utilisateur.
Les sessions sont identifiées et suivies par un SessionID de 120 bits, transmis du client au serveur et renvoyé sous forme de cookie ou d'URL modifiée. SessionID est globalement unique et aléatoire.
Les objets d'état de session sont créés par la classe HttpSessionState, qui définit une collection d'éléments d'état de session.
La classe HttpSessionState possède les propriétés suivantes :
propriété | décrire |
---|---|
ID de session | Identifiant de session unique. |
Article (nom) | Valeur de l'élément d'état de session portant le nom spécifié, qui est la propriété par défaut de la classe HttpSessionState. |
Compter | Nombre d'éléments dans la collection d'états de session. |
Temps mort | Obtient et définit la durée, en minutes, autorisée entre les requêtes avant que le fournisseur n'arrête l'état de session. |
La classe HttpSessionState possède les méthodes suivantes :
méthode | décrire |
---|---|
Ajouter(nom, valeur) | Ajoute de nouveaux éléments à la collection d’états de session. |
Clair | Supprime tous les éléments de la collection d’états de session. |
Supprimer(nom) | Supprime l'élément spécifié de la collection d'états de session. |
Supprimer tout | Supprime toutes les clés et valeurs de la collection d'états de session. |
Supprimer à | Supprime l'élément à l'index spécifié de la collection d'états de session. |
Un objet d'état de session est une paire nom-valeur qui peut stocker et récupérer des informations à partir d'un objet d'état de session. De même, vous pouvez utiliser le code suivant :
void StoreSessionInfo(){ String fromuser = TextBox1.Text; Session["fromuser"] = fromuser;}void RetrieveSessionInfo(){ String fromuser = Session["fromuser"]; Label1.Text = fromuser;}
Le code ci-dessus stocke uniquement les chaînes dans l'objet dictionnaire de session. Cependant, il peut stocker tous les types de données primitifs et les tableaux composés de types de données primitifs, les objets DataSet, DataTable, HashTable et Image, ainsi que tous les objets définis par l'utilisateur qui héritent de Type ISérialisable.
L'exemple suivant illustre le concept de stockage de l'état de session. Il y a deux boutons sur la page : un bouton de zone de texte pour saisir une chaîne et un bouton d'étiquette pour afficher le texte stocké lors de la dernière session. Le code du fichier de balises ressemble à ceci :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <table> <tr> <td> <asp:Label ID="lblstr" runat="server" Text="Enter a String" > </asp:Label> </td> <td> <asp:TextBox ID="txtstr" runat="server"> </asp:TextBox> </td> </tr> <tr> <td> </td> <td> </td> </tr> <tr> <td> <asp:Button ID="btnnrm" runat="server" Text="No action button" /> </td> <td> <asp:Button ID="btnstr" runat="server" OnClick="btnstr_Click" Text="Submit the String" /> </td> </tr> <tr> <td> </td> <td> </td> </tr> <tr> <td> <asp:Label ID="lblsession" runat="server" > </asp:Label> </td> <td> </td> </tr> <tr> <td> <asp:Label ID="lblshstr" runat="server"> </asp:Label> </td> <td> </td> </tr> </table> </div> </form> </body></html>
Cela devrait ressembler à ceci dans la vue conception :
Le code de fond est le suivant :
public partial class _Default : System.Web.UI.Page { String mystr; protected void Page_Load(object sender, EventArgs e) { this.lblshstr.Text = this.mystr; this.lblsession.Text = (String)this.Session["str"]; } protected void btnstr_Click(object sender, EventArgs e) { this.mystr = this.txtstr.Text; this.Session["str"] = this.txtstr.Text; this.lblshstr.Text = this.mystr; this.lblsession.Text = (String)this.Session["str"]; }}
Exécutez le fichier et observez son fonctionnement :
Une application ASP.NET est une collection de toutes les pages Web, codes et autres fichiers dans un seul répertoire virtuel sur un serveur Web. Lorsque les informations sont stockées dans l’état de l’application, elles sont disponibles pour tous les utilisateurs.
Pour permettre l'utilisation de l'état de l'application, ASP.NET crée un objet d'état d'application pour chaque application à partir de la classe HttpApplicationState et stocke l'objet dans la mémoire du serveur. Cet objet est représenté par le fichier de classe global.asax.
L'état de l'application est principalement utilisé pour stocker des compteurs, d'autres statistiques et toutes les données d'application telles que les taux d'imposition et les taux de remise, ainsi que pour stocker le chemin de l'utilisateur vers le site Web.
La classe HttpApplicationState possède les propriétés suivantes :
propriété | décrire |
---|---|
Article (nom) | La valeur de l'entrée d'application avec le nom spécifié, qui est la propriété par défaut de HttpApplicationState. |
Compter | Nombre d’éléments dans la collection d’états d’application. |
La classe HttpApplicationState possède les méthodes suivantes :
méthode | décrire |
---|---|
Ajouter(nom, valeur) | Ajoute de nouveaux éléments à la collection d’états de l’application. |
Clair | Supprime tous les éléments de la collection d’états de l’application. |
Supprimer(nom) | Supprime l'élément spécifié de la collection d'états de l'application. |
Supprimer tout | Supprime tous les objets d'une collection HttpApplicationState. |
Supprimer à | Supprime un objet HttpApplicationState de la collection trouvée par l'index. |
Verrouillage() | Verrouillez la collection d'états de l'application afin que seul l'utilisateur actuel puisse y accéder. |
Ouvrir() | Déverrouillez la collection d'états de l'application afin que tous les utilisateurs puissent y accéder. |
Les données d'état de l'application sont généralement conservées par des gestionnaires écrits pour les événements :
L'application s'ouvre
Fin de la candidature
erreur d'application
La séance démarre
séance terminée
L'extrait de code suivant montre la syntaxe de base pour stocker les informations sur l'état de l'application :
Void Application_Start(object sender, EventArgs e){ Application["startMessage"] = "The application has started.";}Void Application_End(object sender, EventArgs e){ Application["endtMessage"] = "The application has ended.";}