web-dev-qa-db-fra.com

ViewState Vs Session ... maintien d'un objet tout au long du cycle de vie d'une page

Quelqu'un peut-il s'il vous plaît expliquer la différence entre ViewState et Session?

Plus précisément, j'aimerais connaître le meilleur moyen de garder un objet disponible (paramétrer en permanence des membres via des publications) tout au long du cycle de vie de ma page.

J'utilise actuellement Sessions pour cela, mais je ne suis pas sûr que ce soit la meilleure façon.

Par exemple:

SearchObject searchObject;
protected void Page_Load(object sender, EventArgs e)
{
     if(!IsPostBack)
     {
         searchObject = new SearchObject();
         Session["searchObject"] = searchObject;
     }
     else
     {
         searchObject = (SearchObject)Session["searchObject"];
     }
}

cela me permet d’utiliser mon searchObject n’importe où ailleurs sur ma page, mais c’est un peu fastidieux, car je dois réinitialiser ma var de session si je change de propriétés, etc.

Je pense qu'il doit exister un meilleur moyen de le faire afin que .NET ne ré-instancie pas l'objet à chaque chargement de la page, mais le place également dans la portée globale de la classe Page?

38
Kyle

Si la taille de l’objet recherché n’est pas énorme, utilisez plutôt ViewState. Un ViewState est parfait si vous voulez que l'objet soit uniquement actif pendant le cycle de vie de la page en cours.

Un objet de session peut également être utilisé, mais une fois que l'objet de recherche est inséré, il sera évidemment plus long pour le cycle de vie de la page.

De plus, une chose que je fais avec les objets ViewState/Session consiste à envelopper leur accès avec une propriété:

public object GetObject
{
    get
    {
        return ViewState["MyObject"];
    }
    set
    {
        ViewState["MyObject"] = value;
    }
}

J'ai tendance à trouver plus propre de le faire de cette façon. Il suffit de changer le code ci-dessus pour répondre à vos besoins.

57
Jason Evans

Tout d’abord, Viewstate est une page où, comme la session existe tout au long de l’application pendant la session en cours, si vous souhaitez que votre objet de recherche persiste sur plusieurs pages, la session est le bon choix.

Deuxièmement, Viewstate est transféré sous forme de texte chiffré entre le navigateur et le serveur à chaque publication. Ainsi, plus vous stockez dans Viewstate, plus le nombre de données envoyées au client et renvoyées par celui-ci est chaque fois, tandis que la session est stockée côté serveur. et la seule chose qui va et vient est un identifiant de session, sous forme de cookie ou dans l'URL. 

Que la session ou l'état d'affichage soit le bon endroit pour stocker votre objet de recherche, cela dépend de ce que vous en faites et des données qu'il contient. Nous espérons que l'explication ci-dessus vous aidera à choisir la bonne méthode à utiliser.

26
Ben Robinson

L'état d'affichage est spécifique à la page, l'état de session étant spécifique au navigateur. Vous ne pouvez pas pouvoir transmettre les données d'une page à une autre via l'état d'affichage. Mais vous ferez avec l'état de session . Chaque session a un identifiant unique, Où as View view stocké des données dans des champs cachés sur la page même rendre la page lourde et l'application lente . Chaque contrôle a l'état d'affichage true par défaut qui stocke son état (état du contrôle), nous pouvons l'activer ou le désactiver facilement en rendant enableviewstate = false

0
Bhawesh Deepak