2011-05-26 2 views
4

Dans un exemple simple avec deux Update-Panels imbriqués. Ils sont imbriqués, et chacun a une étiquette qui est remplie avec l'heure actuelle dans le code derrière. Je ne comprends pas pourquoi la propriété ChildrenAsTriggers="true" - sur le UpdatePanel externe n'a aucun effet? Lorsque j'appuie sur le bouton 'Mettre à jour le panneau imbriqué', l'heure dans le parent UpdatePanel n'est pas mise à jour. Mais pour autant que je comprends la propriété, il devrait être:UpdatePanel imbriqué: pourquoi ChildrenAsTriggers n'a aucun effet?

<asp:ScriptManager ID="ScriptManager1" runat="server" 
    onasyncpostbackerror="ScriptManager1_AsyncPostBackError"> 
</asp:ScriptManager> 

<asp:Button ID="ButtonUpdate" runat="server" Text="Update Panel 1" 
    style="margin-top: 15px" onclick="ButtonUpdate_Click" /> 
<asp:Button ID="ButtonUpdateNestedPanel" runat="server" Text="Update Nested Panel" 
    style="margin-top: 15px" onclick="ButtonUpdateNestedPanel_Click" /> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ButtonUpdate" EventName="Click" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:Label ID="Label1" runat="server" /> 

     <asp:UpdatePanel ID="UpdatePanelNested" runat="server"> 
      <Triggers> 
       <asp:AsyncPostBackTrigger ControlID="ButtonUpdateNestedPanel" EventName="Click" /> 
      </Triggers> 
      <ContentTemplate> 
       <asp:Label ID="LabelNested" runat="server" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 

    </ContentTemplate> 
</asp:UpdatePanel> 

Thx pour tout tipps! sl3dg3

p.s .: code sous-jacent:

protected void ButtonUpdate_Click(object sender, EventArgs e) 
{ 
    LabelNested.Text = DateTime.Now.ToString(); 
    Label1.Text = DateTime.Now.ToString(); 
} 
protected void ButtonUpdateNestedPanel_Click(object sender, EventArgs e) 
{ 
    LabelNested.Text = DateTime.Now.ToString(); 
    Label1.Text = DateTime.Now.ToString(); 
} 

Répondre

0

Lorsque la propriété ChildrenAsTriggers est définie sur true et tout contrôle enfant des causes contrôle UpdatePanel postback. Les contrôles enfants des contrôles UpdatePanel imbriqués n'entraînent pas de mise à jour du contrôle UpdatePanel externe à moins qu'ils ne soient explicitement définis en tant que déclencheurs pour le panneau parent. http://forums.asp.net/t/1422425.aspx/1

et cela devrait être comme ...

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="ButtonUpdate" EventName="Click" /> 
      <asp:AsyncPostBackTrigger ControlID="ButtonUpdateNestedPanel" EventName="Click" /> 
     </Triggers> 
...... 
...... 
+0

hmm mais là encore je pourrais laisser 'ChildrenAsTriggers' dehors - il mettrait à jour de toute façon ... Je ne peux tout simplement pas faire le point de cette propriété. – sl3dg3

0

Je crois que, afin de voir l'effet désiré dans l'action, vous devez effectivement ajouter vos boutons comme des enfants dans le modèle de contenu. La propriété "ChildrenAsTriggers" s'applique uniquement aux enfants directs du bloc "ContentTemplate".

-1

ChildrenAsTriggers = "true" Affectez la valeur true à la propriété ChildrenAsTriggers si vous souhaitez que les publications des contrôles enfants immédiats du contrôle UpdatePanel provoquent une mise à jour du contenu du panneau. Les contrôles enfants des contrôles UpdatePanel imbriqués ne provoquent pas de mise à jour du contenu du contrôle parent UpdatePanel sauf si vous appelez explicitement la méthode Update ou si vous définissez les contrôles enfants comme déclencheurs.

Questions connexes