2009-11-04 4 views
0

J'ai beaucoup de contrôles Web créés dynamiquement dans une page ASP.NET. Dans certains scénarios de publication (lorsque je clique sur un LinkButton), je souhaite ignorer le chargement de l'ancien arborescence des contrôles Web et générer immédiatement la nouvelle arborescence. Malheureusement, lorsque je génère le nouvel arbre, le viewstate du vieil arbre est chargé dans celui-ci. Je veux être en mesure de désactiver le processus de chargement viewstate pour ce scénario spécifique, mais après le chargement de la nouvelle arborescence, l'état de vue devrait fonctionner normalement. J'ai déjà résolu une partie du problème, en remplaçant la méthode LoadViewState des contrôles web, mais, malheureusement, cela désactive le viewstate spécifique pour le contrôle, pas pour ses enfants aussi (boîtes de texte, boutons, etc.).Désactiver le chargement de viewstate pour les contrôles enfants

Est-ce possible?

Merci.

Répondre

0

Vous pouvez essayer de créer la nouvelle arborescence après le chargement de viewstate, par ex. dans Page_Load.

+0

Oui, je charge effectivement les nouveaux contrôles en cas LinkButton.Clicked qui vient après Page_Load, mais la façon dont fonctionne ASP.NET, le chargement de ViewState être différé jusqu'à ce que vous chargiez de nouveaux contrôles dans un contrôle enraciné (celui qui a des parents tout le chemin jusqu'à la page). –

+0

Ah, contrôles ajoutés dynamiquement. C'est toujours un tel désordre .. :) Je ne sais pas comment votre code est structuré, mais peut-être que vous pouvez vous accrocher dans votre événement de chargement des contrôles dynamiques et créer la nouvelle arborescence dans ce gestionnaire? –

+0

Pas vraiment sûr de ce que vous vouliez dire par "accrochez-vous à l'événement de chargement des contrôles dynamiques et créez le nouvel arbre dans ce gestionnaire". –

0

Vous pouvez le faire par programmation en effaçant le contenu de l'arborescence avant de lier les nouvelles données. Il devrait être somehting le long des lignes de

tree.nodes.clear() 

puis vous venez de continuer comme si l'arbre est vide et que vous ajoutez des données soit bondissant ou en ajoutant des nœuds programatically avec

tree.Nodes.Add(New TreeNode("name of node")) 

maintenant Pour les contrôles réguliers que je suppose vous utilisez vous rencontrerez une foule de problèmes si vous n'utilisez pas viewstate. Vous pouvez les supprimer de l'arborescence de contrôle d'une manière similaire en utilisant controlname.controls.clear. Maintenant, est-ce que vous vous souciez principalement de l'ajout de ces contorsions ou est-ce que vous ne voulez pas porter le fardeau de viewstate? Je suggère que si c'est le dernier que vous effacez vos contrôles par programme et stockez le côté de serveur de viewstate quelque part de sorte qu'il puisse être chargé de la mémoire au lieu d'utiliser votre bande passante. En ce qui concerne le chargement dynamique des contrôles, vous devrez vous assurer que vos nouveaux contrôles portent des ID différents pour eux. Ce que j'ai fait dans une de mes applications est en fait de garder les anciens contrôles, de les rendre invisibles et d'effacer l'état de viewstate, puis au prochain appel, je les retire réellement de l'arborescence.

+0

Je n'utilise pas vraiment un arbre. Quand un dit "arbre" je faisais référence à l'arbre des contrôles que j'ajoute dynamiquement. Le problème que j'essaie d'éviter est de générer une liste très longue de contrôles sur LinkButton.Click, seulement pour rendre asp.net heureux et charger viewstate, puis les oublier et recréer avec le nouveau jeu de contrôles. J'essaie d'éviter le premier pas. Normalement je n'irais pas à cette longueur pour modifier le comportement normal de la création de contrôles dynamiques asp.net, mais comme je l'ai dit, cette opération est dans ce cas très longue et je veux l'éviter complètement. –

Questions connexes