2009-04-07 1 views
12

Sto usando .NET 3.5 e sto costruendo pagine all'interno del framework Community Server 2008.Come impedire a UpdatePanel di causare il postback dell'intera pagina?

In una delle pagine, sto cercando di far funzionare un UpdatePanel.

ho preso un campione direttamente dal sito ASP.NET, aggiornamento una volta in un UpdatePanel l'ora corrente facendo clic su un pulsante, ma per qualche ragione quando provo ed eseguire la funzione tutta pagina viene aggiornata.

Ecco quello che ho:

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> 

Ogni volta che si fa clic sul pulsante, certo gli aggiornamenti del pannello - ma l'intero messaggi di pagina indietro! Posso vedere l'intera pagina lampeggiare. Che diamine sto facendo di sbagliato?

Sono all'interno di una pagina master annidata, ma non sono sicuro se questo è un problema. Potrebbe esserci qualcosa in questo framework di Community Server che sto usando che fa postare tutti gli eventi?

risposta

16

Hai provato a impostare Button1 come AsyncPostBackTrigger nella sezione Trigger? Impostare la proprietà ChildrenAsTriggers su true e la proprietà UpdateMode su 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

Grazie mille! – user53885

+0

la sezione trigger con il asyncpostbacktrigger ha reso la mia giornata, grazie mille !! – BitQuestions

+0

Qualcuno può spiegare perché è richiesto questo trigger asincrono esplicito? I controlli all'interno di un UpdatePanel non dovrebbero causare un aggiornamento parziale della pagina per impostazione predefinita? – drizin

6

Non vedo Label2 nell'esempio di codice sopra riportato. Se Label2 si trova all'esterno di UpdatePanel, si verificherà un aggiornamento completo della pagina perché è ciò che è necessario affinché la pagina aggiorni correttamente Label2.

Per impostazione predefinita, UpdatePanels aggiornerà solo dinamicamente il contenuto al loro interno, quando attivato dai controlli interni. Se è necessario eseguire aggiornamenti più fantasiosi, ad esempio un pulsante esterno al pannello che causa l'aggiornamento o un'etichetta in un pannello diverso da aggiornare, è necessario impostare l'attributo Conditional sugli UpdatePanel e effettuare alcune chiamate di aggiornamento manuali. nel tuo codice.

+0

Grazie mille! – user53885

2

Impostare ChildrenAsTriggers="true" sul controllo UpdatePanel.

2

"Per impostazione predefinita, UpdatePanels si aggiorna solo dinamicamente il contenuto al loro interno, una volta innescato da controlli all'interno di essi."

In caso contrario, l'intera pagina verrà aggiornata! Questo è il punto!

2

Un'altra possibile ragione è che se la pagina ha ClientIDMode="static", quindi controlli che si prevede di aggiornare solo UpdatePanel aggiornerà l'intera pagina.

Per risolvere il problema, è sufficiente impostare ClientIDMode="AutoID" sui controlli che dovrebbero attivare il post di UpdatePanel.