2010-03-02 5 views
1

J'ai mis en place un contrôle utilisateur que je réutilise sur plusieurs pages. Cependant, je suis confronté à divers problèmes tels que la maintenance de session sur plusieurs pages, l'effacement de session lors de la navigation - essentiellement le contrôle de la maintenance de l'état, que je me demande si tout cela vaut la peine.Cauchemar de contrôle utilisateur ASP.net

Chaque fois que la page est chargée, un contrôle y est ajouté, j'utilise la session pour recréer son état, le cas échéant. Lorsque je m'éloigne d'une page, j'efface la session via javascript window.onunload avec la méthode web. Window.onunload m'a causé des problèmes en exécutant APRÈS le nouvel événement page_load, créant ainsi une situation très difficile à gérer.

Des conseils sur la façon de résoudre ce problème sans abandonner les contrôles utilisateur tous ensemble? Quelle est l'autre façon de réutiliser le code sans se couper les cheveux? Merci!

+0

pouvez-vous poster du code sur la façon dont vous effacez la session et quand? – hunter

+0

Je vide la session à l'intérieur de window.onunload en utilisant la méthode web. – sarsnake

Répondre

1

J'ai résolu le problème avec l'utilisation de IsPostBack sur la page qui héberge le contrôle utilisateur. De cette façon, chaque fois que la page n'est pas un résultat de la publication, les variables d'état du contrôle utilisateur seront initialisées.

1

Ceci est un mal de tête commun. Sur la base de toute la littérature que j'ai vue, ainsi que de mon expérience personnelle, il n'est pas pratique de dépendre de la session de compensation via javascript ou tout autre moyen. Le concept d'état de session est superposé sur HTTP; il n'a jamais été prévu d'être conscient de la session.

Il semble que vous insistiez sur l'état de la session à son point de rupture. Avez-vous considéré ViewState ou une base de données pour la gestion des données avec état? Pourquoi est-il essentiel d'effacer les données de session à chaque fois que l'utilisateur quitte l'ordinateur?

+0

Si l'utilisateur clique sur le menu de niveau supérieur, ils devraient obtenir l'état de contrôle par défaut, pas l'état précédemment mémorisé .... d'où dans certains endroits, je voudrais effacer la session. – sarsnake

+0

ViewState est une meilleure solution. –

+0

ViewState est un dictionnaire qui peut contenir des objets sérialisables et qui est conservé à travers les publications dans une chaîne codée en Base64 dans un champ de formulaire masqué. Il peut être utile pour la gestion d'état à travers les publications, mais peut augmenter la quantité de données transitant par le réseau. Utilisation: ViewState ["MyData"] = myObj; –

Questions connexes