Tout le monde sait qu'Asp.Net utilise ViewState pour enregistrer les informations de la page et les informations définies par l'utilisateur entre le client et le serveur.
Dans les versions antérieures à 2.0, ViewState est stocké dans des contrôles masqués sur la page : __VIEWSTATE
Nous ne pouvons pas changer comment et où ViewState est enregistré.
Désormais dans la version 2.0, Asp.Net a ouvert cette fonctionnalité, me permettant de personnaliser l'emplacement de sauvegarde de ViewState.
Un nouvel attribut a été ajouté à la classe Page dans la version 2.0 : PageStatePersister.
Nous pouvons remplacer cette propriété pour implémenter une sauvegarde ViewState personnalisée. Cette propriété renvoie une instance d'une sous-classe héritée de la classe PageStatePersister.
Deux méthodes de sauvegarde sont fournies par défaut dans la version 2.0 : l'une consiste à enregistrer dans la page (HiddenFieldPageStatePersister) et l'autre consiste à enregistrer dans la session (SessionPageStatePersister).
Le code suivant remplace la propriété PageStatePersister et enregistre ViewState dans la session :
protected override PageStatePersister PageStatePersister
{
obtenir
{
renvoie un nouveau SessionPageStatePersister (this);
}
}
En plus de ces deux méthodes de sauvegarde par défaut, nous pouvons hériter de la classe PageStatePersister pour implémenter nos propres méthodes de sauvegarde.
Le code suivant montre comment enregistrer ViewState dans un fichier :
utiliser le système ;
en utilisant System.Data ;
en utilisant System.Configuration ;
en utilisant System.Web ;
en utilisant System.Web.Security ;
en utilisant System.Web.UI ;
en utilisant System.Web.UI.WebControls ;
en utilisant System.Web.UI.WebControls.WebParts ;
en utilisant System.Web.UI.HtmlControls ;
en utilisant System.IO ;
en utilisant System.Runtime.Serialization.Formatters.Binary ;
/**//// <résumé>
/// Description récapitulative de CWingViewState
/// </summary>
classe publique CWingViewState : PageStatePersister
{
public CWingViewState (page page): base (page)
{
}
remplacement public void Load()
{
LireFichier();
}
remplacement public void Save()
{
WriteFile();
}
vide privé WriteFile()
{
Fichier FileStream = File.Create (@"C:CustomerViewState.CW");
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fichier, base.ViewState);
fichier.Flush();
fichier.Close();
}
vide privé ReadFile()
{
Fichier FileStream = File.OpenRead (@"C:CustomerViewState.CW");
BinaryFormatter bf = new BinaryFormatter();
base.ViewState = bf.Deserialize(file);
}
}
Dans des pages spécifiques :
remplacement protégé PageStatePersister PageStatePersister
{
obtenir
{
renvoie un nouveau CWingViewState(this);
}
}
Source : BLOG de l'espace .Net