2009-04-07 7 views
12

J'utilise .NET 3.5 et les pages de construction à l'intérieur du cadre Community Server 2008.Comment arrêter UpdatePanel de provoquer la publication de page entière?

Sur l'une des pages, j'essaie de faire fonctionner un UpdatePanel.

Je pris un échantillon directement sur le site Web ASP.NET, mise à jour une fois dans un UpdatePanel à l'heure en cliquant sur un bouton, mais pour une raison quelconque quand je tente d'exécuter les fonctions l'ensemble actualise la page.

Voici ce que j'ai:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString(); 
    Label2.Text = "Panel refreshed at " + DateTime.Now.ToString(); 
} 
<asp:ScriptManager ID="ScriptManager1" runat="server"/> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <fieldset> 
      <legend>UpdatePanel</legend> 
      <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br /> 
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 
     </fieldset> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Chaque fois que je clique sur le bouton, que les mises à jour du panneau - mais les messages entiers page retour! Je peux voir toute la page qui clignote. Que diable est-ce que je fais mal?

Je suis à l'intérieur d'une page Master imbriquée, mais je ne suis pas sûr que ce soit un problème. Pourrait-il y avoir quelque chose dans ce framework de serveur de communauté que j'utilise et qui provoque la publication de tous les événements?

Répondre

16

Avez-vous essayé de définir Button1 comme AsyncPostBackTrigger dans la section Déclencheurs? Définissez la propriété ChildrenAsTriggers sur true et la propriété UpdateMode sur Conditional.

protected void Button1_Click(object sender, EventArgs e) 
{  
    Label1.Text = "Panel refreshed at " + DateTime.Now.ToString();  
    UpdatePanel1.Update(); 
}  
<asp:ScriptManager ID="ScriptManager1" runat="server"/> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional"> 
    <Triggers>   
     <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />  
    </Triggers>  
    <ContentTemplate>   
     <fieldset>    
      <legend>UpdatePanel</legend>    
      <asp:Label ID="Label1" runat="server" Text="Panel created."></asp:Label><br />    
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />   
     </fieldset>  
    </ContentTemplate> 
</asp:UpdatePanel> 
+0

Merci beaucoup! – user53885

+0

la section trigger avec le asyncpostbacktrigger a fait ma journée, merci beaucoup !! – BitQuestions

+0

Quelqu'un peut-il expliquer pourquoi ce déclencheur asynchrone explicite est requis? Les contrôles d'un UpdatePanel ne sont-ils pas supposés provoquer une mise à jour partielle de la page par défaut? – drizin

6

Je ne vois pas Label2 dans votre exemple de code ci-dessus. Si Label2 est situé en dehors du UpdatePanel, une actualisation complète de la page se produira car c'est ce qui est requis pour que la page mette correctement à jour Label2. Par défaut, UpdatePanels actualise de manière dynamique le contenu qu'il contient, lorsqu'il est déclenché par des contrôles internes. Si vous devez faire des mises à jour plus fantaisistes, dites un bouton à l'extérieur du panneau pour que l'actualisation ou l'étiquette d'un autre panneau soit mise à jour, alors vous devez définir l'attribut Conditional sur votre ou vos UpdatePanel et effectuer des mises à jour manuelles. dans votre code.

+0

Merci beaucoup! – user53885

2

Définissez ChildrenAsTriggers="true" sur votre contrôle UpdatePanel.

2

« Par défaut, UpdatePanels ne rafraîchira dynamiquement le contenu en eux, lorsqu'ils sont déclenchés par des contrôles en leur sein. »

Sinon, toute la page sera rafraîchie! C'est le but!

2

Une autre raison possible est que si la page a ClientIDMode="static", les contrôles que vous prévoyez d'actualiser uniquement le UpdatePanel actualiseront la page entière.

Pour résoudre le problème, il vous suffit de définir ClientIDMode="AutoID" sur le (s) contrôle (s) qui devrait déclencher le retour du UpdatePanel.

Questions connexes