ViewState Vs Session ... maintenir l'objet tout au long du cycle de vie de la page

Quelqu'un peut-il expliquer la différence entre ViewState et Session?

Plus précisément, j'aimerais connaître la meilleure façon de garder un objet disponible (en définissant continuellement des membres via des postbacks) tout au long du cycle de vie de ma page.

J'utilise actuellement des Sessions pour le faire, mais je ne suis pas sûr que ce soit le meilleur moyen.

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 lourd car je dois réinitialiser mon session var si je change des propriétés, etc.

Je pense qu'il doit y avoir une meilleure façon de le faire pour que. NET ne ré-instancie pas l'objet chaque fois que la page se charge, mais le place également dans la portée globale de la classe Page?

38
demandé sur Ryan Kohn 2010-05-21 18:56:03

3 réponses

Si l'objet de recherche n'est pas de taille énorme, utilisez un ViewState. Un ViewState est parfait si vous voulez seulement que l'objet vive pour le cycle de vie de la page en cours.

Un objet de session est également très bien à utiliser, mais évidemment une fois que l'objet de recherche est là, il restera plus longtemps le cycle de vie de la page.

En outre, une chose que je fais avec les objets ViewState / Session est d'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.

56
répondu Jason Evans 2016-08-25 11:44:02

Tout D'abord, Viewstate est par page où, comme la session existe dans toute l'application pendant la session en cours, Si vous voulez que votre searchobject persiste sur les pages, la session est la bonne solution.

La Seconde Viewstate est transférée sous forme de texte chiffré entre le navigateur et le serveur à chaque publication, de sorte que plus vous stockez dans Viewstate, plus les données descendent et reviennent du client à chaque fois, alors que la session est stockée côté serveur et la seule chose qui va et vient est un identifiant de session, soit en tant que cookie ou dans L'URL.

Si la session ou viewstate est le bon endroit pour stocker votre objet de recherche dépend de ce que vous en faites et des données qu'il contient, espérons que l'explication ci-dessus vous aidera à décider de la bonne méthode à utiliser.

25
répondu Ben Robinson 2017-10-05 10:43:15

L'état de la vue est spécifique à la page, où l'état de la Session est spécifique au navigateur. Vous ne pouvez pas transmettre les données d'une page à une autre via l'état de la vue. Mais vous ferez avec l'état de la session. Chaque session a un identifiant unique, où l'État de vue stocké des données dans des champs cachés sur la page elle-même.La Session stocke les données côté serveur, où les données d'état de la vue sont stockées sur la page, ce qui rend la page lourde et l'application lente. Chaque contrôle a l'état de vue true par défaut qui stocke son état (état de contrôle), nous pouvons l'activer ou le désactiver facilement en faisant enableviewstate = false

0
répondu Bhawesh Deepak 2016-06-28 13:34:33