Partager via


Gestion de l'état dans un contrôle

Un contrôle serveur ASP.NET hérite (de Control) d'une propriété nommée ViewState qui lui permet de participer facilement à la gestion de l'état. ViewState a comme type System.Web.UI.StateBag, c'est-à-dire un dictionnaire qui stocke les données sous la forme de paires nom/valeur. ViewState est rendu persistant dans une variable chaîne par l'infrastructure de page ASP.NET avant d'être envoyé au client puis de retourner en tant que variable masquée. Lors de la publication, l'infrastructure de page analyse la chaîne d'entrée émanant de la variable masquée et renseigne la propriété ViewState de chaque contrôle. Si un contrôle utilise ViewState pour les données de propriété à la place d'un champ privé, cette propriété sera automatiquement rendue persistante entre les allers-retours au client. (Si une propriété n'est pas rendue persistante dans ViewState, les bonnes pratiques incitent à retourner sa valeur par défaut lors de la publication.)

Le fragment de code suivant montre une propriété qui est enregistrée dans ViewState.

public String Text {
          get {
              return (String) ViewState["Text"];
          }
          set {
              ViewState["Text"] = value;
          }
       }
[Visual Basic]
Public Property Text() As String
   Get
      Return CType(ViewState("Text"), String)
   End Get
   Set
      ViewState("Text") = value
   End Set
End Property

Pour obtenir un exemple d'utilisation de ViewState en vue de stocker des propriétés, consultez le Démarrage rapide ASP.NET —> Web Forms ASP.NET —> Création de contrôles personnalisés.

Remarque   ViewState est généralement utilisé pour rendre persistantes les données des formulaires sur une page entre les allers-retours. N'utilisez pas ViewState pour stocker des informations telles que mots de passe, chaînes de connexion et chemins d'accès de fichiers. Pour des informations sur le partage de données entre des pages ou un stockage plus persistant, consultez Gestion d'état ASP.NET.

Types pouvant être rendus persistants dans ViewState

Un type qui est sérialisable ou qui a un TypeConverter défini peut être rendu persistant dans ViewState. Cependant, les types qui sont uniquement sérialisables sont plus lents et génèrent un ViewState beaucoup plus volumineux que ceux qui possède un TypeConverter. ViewState est sérialisé à l'aide d'un format de sérialisation d'objet limité pour les types primitifs ainsi que pour les types String, ArrayList et HashTable.

ViewState et performances

Les développeurs de contrôles doivent savoir que toutes les données qui se trouvent dans un ViewState effectuent automatiquement un aller-retour jusqu'au client. Dans la mesure où les allers-retours pèsent sur les performances, il importe d'utiliser judicieusement ViewState. S'il existe plusieurs propriétés qui dépendent de données communes, vous pouvez optimiser les performances en rendant persistants uniquement les éléments clés de ViewState. Un contrôle hérite (de Control) d'une propriété nommée EnableViewState qui permet aux consommateurs du contrôle d'activer ou de désactiver la persistance de ViewState.

Personnalisation de la restauration de l'état à l'aide de ViewState

Pour améliorer l'efficacité ou pour enregistrer un type personnalisé qui ne peut pas être stocké par défaut dans ViewState, un contrôle peut personnaliser la manière dont les données des propriétés sont stockées dans ViewState. Si un contrôle personnalise le stockage des données des propriétés, il doit également fournir une implémentation personnalisée pour la restauration des valeurs des propriétés à partir des données stockées dans ViewState. La classe de base Control fournit deux méthodes à cette fin : SaveViewState et LoadViewState. Ces méthodes ont les signatures suivantes.

protected virtual object SaveViewState();
protected virtual void LoadViewState(object savedState);
[Visual Basic]
Overridable Protected Function SaveViewState() As Object
Overridable Protected Sub LoadViewState(ByVal savedState As Object)

Pour obtenir des exemples de substitution de SaveViewState et de LoadViewState, consultez Exemple de contrôle dépendant basé sur un modèle.

Voir aussi

Gestion d'état ASP.NET | État de session | État de l'application