2009-07-24 3 views
3

Nous avons une structure qui a 3 UpdatePanels principaux, chacun ayant plusieurs UpdatePanels imbriqués (mais seulement un niveau d'imbrication). Tous les panneaux sont conditionnels avec ChildrenAsTriggers mis à false, donc cela ressemble à peu près à ceci:Pourquoi un contrôle enfant d'un panneau de mise à jour enfant met-il à jour le parent et l'enfant si chacun est défini sur conditionnel?

<asp:UpdatePanel ChildrenAsTriggers="false" OnLoad="Update_OnLoad" 
    ID="updateCol2" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
     <asp:UpdatePanel ChildrenAsTriggers="false" UpdateMode="Conditional" 
      ID="updateFeed" runat="server"> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="btnSubmit" EventName="Click" /> 
      </Triggers> 
      <ContentTemplate> 
       <asp:Button OnClick="function" ID="btnSubmit" runat="server" /> 
      <ContentTemplate> 
     </asp:UpdatePanel> 
    </ContentTemplate> 
</asp:UpdatePanel> 

j'attendre à ce que la fonction OnLoad du panneau de mise à jour parent ne jamais courir, sauf sur la charge réelle de la page, et que la fonction OnClick sera exécuté sur chaque clic, mettre à jour l'enfant UpdatePanel du bouton. Toutefois, le parent UpdatePanel IS est mis à jour à chaque clic du bouton et le panneau de mise à jour enfant se déclenche uniquement (suite à la mise à jour parent updatepanel.)

+0

J'ai presque avalé ma langue en lisant ce titre à voix haute;) – bernhof

+0

J'espère que mon édition a clarifié ce que l'OP veut. –

+0

Il m'a tué pour l'écrire, mais je ne pouvais pas penser à une meilleure façon de le dire :( – pschorf

Répondre

2

Le panneau de mise à jour parent est-il réellement mis à jour, c.-à-d. ?

j'attendre à ce que la fonction OnLoad du panneau de mise à jour parent ne jamais courir, sauf sur la charge de la page réelle

Cette hypothèse est fausse, mais malheureusement commun. N'oubliez pas que, même s'il s'agit d'une publication asynchrone, le cycle de vie complet de la page et du contrôle est exécuté pour chaque contrôle, y compris Load et Init. C'est comme si vous demandiez la page normalement. La différence est que seule la région UpdatePanel de la page sera mise à jour, et non l'intégralité de l'interface utilisateur.

Pour en savoir plus sur le fonctionnement de UpdatePanels, il existe un great article on ASP.Net Ajax documentation site.

+0

Cela explique ce problème.Le contenu du parent ne changent pas, seulement de l'enfant.La méthode OnLoad du parent est enveloppée dans un if (! IsPostBack) {...} afin qu'aucun dommage ne soit fait Il semble toujours étrange que l'OnLoad du parent soit appelé mais pas la fonction Click de l'enfant ou du bouton – pschorf

+0

Ouais c'est bizarre et c'est une source constante de confusion et d'erreur Si cela vous a aidé à résoudre votre problème, vous devriez reporter le message et peut-être accepter le message comme réponse si vous êtes convaincu que votre problème est résolu. – womp

0

En utilisant exactement le code collé de pschorf (un panneau de mise à jour contenu dans un autre panneau de mise à jour), est-il possible de ne pas déclencher le panneau de mise à jour parent lorsque l'enfant est renvoyé?

La mise à jour de l'unique panneau de mise à jour enfant ne rafraîchit pas toute la région du panneau de mise à jour parent et uniquement la zone de mise à jour enfant.

Projet exemple de code:

<UPanel1 ChildrenAsTriggers="false" UpdateMode="Conditional">  
<UPanel2 ChildrenAsTriggers="false" UpdateMode="Conditional">  
    <asp:Button onclick="..." />  
</UPanel2>  
Other UPanel1's content not being refreshed after the UPanel2's button click 
</UPanel1> 

Merci! (Peut-être que le message de womp répond ma réponse et j'ai mal compris)

Questions connexes