2010-04-21 5 views
4

J'ai rencontré ce qui semble être un bug ennuyeux avec asp.net UpdatePanels dans 2 projets séparés. Si vous avez un contrôle activé par autopostback, tous les contrôles du panneau de mise à jour peuvent avoir un ensemble visible = false, ce qui entraîne la création d'un panneau de mise à jour vide. Lorsque vous redéfinissez le contrôle Autopostback sur la position qui réactiverait toutes les commandes du panneau de mise à jour, il ne rappelle tout simplement pas le serveur et le panneau de mise à jour ne se met pas à jour.Bug possible dans le contrôle ASP.net UpdatePanel?

Si vous faites tout ce qui fait un rappel sur la même page, le contenu du panneau de mise à jour apparaître comme par magie. C'est comme si asp.net avait décidé que le panneau de mise à jour était vide, donc il n'y a pas de point de rappel, même si le call back remplira le panneau de mise à jour avec du contenu.

La seule solution consiste à ajouter un style de display:none aux contrôles au lieu de définir la propriété visible=false.
Ensuite, cela fonctionne très bien.

Est-ce que quelqu'un d'autre a rencontré ce problème? Est-ce un bug que je soupçonne ou est-ce que je fais quelque chose de mal? Je n'ai pas le temps de poster un exemple de code pour le moment car le code que j'utilise est trop enveloppé dans d'autres choses irréelles, si les gens pensent que ça va aider je vais créer un exemple simple et le poster quand j'ai le temps.

+2

Veuillez poster votre code. – andrewWinn

+0

Où est le contrôle AutoPostback? Dans le UpdatePanel? Quand définissez-vous IsAutoPostBack = true? –

+0

L'AutoPostback se trouve en dehors du panneau de mise à jour. AutoPostBack = true est défini dans le balisage. –

Répondre

1

Mettre la commande qui déclenche la asyncpostback, à l'intérieur du panneau de mise à jour résout ce produit. Je dirais que c'est un bug car la seule différence est que cela fonctionne quand le contrôle est dans le panneau de mise à jour et non quand il est en dehors du panneau de mise à jour.

1

Le contrôle avec AutoPostBack = "true" doit être défini comme AsyncPostBackTrigger du UpdatePanel.

+1

Oui, j'en suis conscient, et ça l'est. Le problème est qu'il ne se déclenche pas toujours. Le problème est que si vous modifiez le contrôle qui est AsyncPostBackTrigger et le résultat de AsyncPostBack est de rendre le contenu du UpdatePanel invisibles. Lorsque vous remettez le contrôle à l'état d'origine, il ne déclenche tout simplement pas un AsyncPostBack. Les propriétés AsyncPostBackTrigger et AutoPostBack sont définies dans le balisage asp.net. Elles sont donc corrigées et il est impossible que ces propriétés puissent changer à la suite d'un AsyncPostBack. –

+0

Alors, que diriez-vous d'ajouter un "asp: HiddenField" dans le panneau de mise à jour? – DavRob60

0

J'ai eu le même problème. J'ai un panneau de mise à jour et des listes déroulantes avec enable = false. Lorsque l'utilisateur a fait AsyncPostBack dans le UpdatePanel, les listes déroulantes en dehors de UpdatePanel deviennent enable = true sans exécuter de code. Lorsque j'ajoute ces listes déroulantes dans UpdatePanel - tout fonctionne. Je ne sais pas pourquoi.

Questions connexes