2009-12-16 8 views
3

Plutôt que d'utiliser l'objet Session ou de le stocker dans la base de données, je stocke les variables temporaires dont j'ai besoin pour persister dans les variables ViewState personnalisées. Par exemple, ViewState ("MyField1") = 1ViewState perdu à l'actualisation dans UpdatePanel?

Lorsque l'utilisateur clique sur le bouton Rrefresh du navigateur, Page.IsPostback est de nouveau à False et ViewState a disparu.

Ma question est. Si l'utilisateur peut souffler le Viewstate en rafraichissant, pourquoi quelqu'un l'utiliserait-il?

Je sais qu'un rafraîchissement repose la dernière page soumise, par pourquoi est-ce que Page.IsPostback est réinitialisé sur False et que ViewState est époustouflé?

Flame-moi si vous voulez pour créer une question potentielle dup, mais j'ai lu d'autres commentaires ici, et il est pas dans ... succombez

Mise à jour post original:

I maintenant pense que cela a à voir avec les publications qui sont effectuées à la suite de cliquer sur les boutons qui sont dans un UpdatePanel. Quelqu'un peut-il aider à faire la lumière sur cela?

Répondre

4

Lorsqu'un client actualise son navigateur, il soumet à nouveau la dernière demande de page complète émise par le client (qui peut être un GET or a POST). Il ne soumet jamais de requêtes AJAX telles que celles générées par les déclencheurs d'événement du panneau de mise à jour ("publication partielle de page").

Le fait que Page.IsPostback est false lorsque vous actualisez la page signifie que votre demande initiale est un GET, alors voici ce qui se passe probablement:

1) Au cours de la demande initiale, le client envoie pas des données de formulaire au serveur - donc pas de champ caché contenant des données d'état d'affichage (Understanding ASP.NET View State est assez détaillé, mais une bonne lecture si vous voulez vraiment comprendre ce qui se passe). Lors du traitement de cette requête, ASP.NET peut renvoyer un état d'affichage au client, mais la requête d'origine est juste une URL.

2) Lorsque l'utilisateur clique sur un bouton dans un UpdatePanel, il déclenche une publication partielle au cours de laquelle MyField est défini sur 1. UpdatePanel modifie l'état d'affichage du client pour refléter la nouvelle valeur. À ce stade, si l'utilisateur soumet une demande POST par des moyens normaux, par exemple en cliquant sur un bouton, l'état d'affichage contiendra les informations mises à jour. Si l'utilisateur clique sur "Actualiser", il soumet à nouveau la requête d'origine à l'étape 1, sans données de formulaire et donc sans état d'affichage.

+0

Voir mise à jour de l'article original – ChadD

+0

Mis à jour ma réponse à la lumière de la nouvelle info. –

1

Où définissez-vous votre ViewState? Et où relisez-vous votre valeur ViewState? Peut-être que oyu vérifie son contenu avant que asp.net n'appelle la méthode LoadViewState().

+0

Voir mise à jour à l'article original – ChadD

+0

Je l'ai vérifié dans l'événement Page Load du formulaire Web – ChadD

1

Le rafraîchissement de l'utilisateur et l'utilisation de updatepanel ne fonctionneront pas très bien ensemble. Je suppose que c'est pourquoi les gens disent que WebForms fournit une abstraction qui fuit sur la programmation Web et certains se déplacent vers MVC. Si vous n'êtes pas intéressé par la migration, je vous conseille de ne pas utiliser updatepanel pour les opérations trop longues ou trop volumineuses, où vous pouvez supposer que l'utilisateur peut actualiser la page. Utilisez-le pour les petites choses comme les éléments dropdown2 qui changent lorsque la sélection sur dropdown1 change.

Envelopper un bon nombre de fonctionnalités dans un seul panneau de mise à jour va causer des problèmes, si vous dépendez de viewstate.

0

Votre question est: «Pourquoi quelqu'un l'utiliserait-il? Viewstate est pratique pour les données que vous savez être générées par une publication. Frapper rafraîchir n'est pas un retour, mais une nouvelle demande. Supposons que vous parcouriez une grille de données et que vous ayez besoin de connaître certains bits de données sur l'élément cliqué. Dans l'événement click, vous pouvez stocker ces données dans viewstate et les traiter à d'autres moments du cycle de vie de la page. , ou post-retours ultérieurs.

L'avantage de ViewState est qu'il est simplement intégré dans le code HTML, donc tout est côté client. Lorsque SessionState est côté serveur et que vous stockez une grande quantité de données dans la session, vous pouvez forcer votre serveur Web ou db à travailler plus fort pour gérer ces données.

Espérons que cela aide.

+0

Non, je savais tout cela. La question est pourquoi quelqu'un l'utiliserait-il s'il est effacé quand l'utilisateur fait un rafraîchissement. Ma mise à jour de ma question a expliqué qu'elle était effacée en raison de l'utilisation d'un panneau de mise à jour, mais j'ai demandé une explication. Merci, néanmoins :-) – ChadD