2009-04-07 5 views
12

Używam .NET 3.5 i tworzenie stron wewnątrz struktury Community Server 2008.Jak zatrzymać działanie funkcji UpdatePanel powodującej odświeżanie całej strony?

Na jednej ze stron próbuję uruchomić działanie UpdatePanel.

Pobrałem próbkę bezpośrednio ze strony internetowej ASP.NET, zaktualizowałem czas w UpdatePanelu do aktualnego czasu, klikając przycisk,, ale z jakiegoś powodu, gdy próbuję wykonać tę funkcję, cała strona odświeża się.

Oto co mam:

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> 

Ilekroć kliknij przycisk, pewny aktualizacje panelowe - ale cała strona posty z powrotem! Widzę migającą całą stronę. Co do cholery robię źle?

Jestem w zagnieżdżonej Masterpage, ale nie jestem pewien, czy to jest problem. Czy może istnieć coś w tej strukturze Community Server, której używam, która powoduje, że wszystkie zdarzenia są odświeżane?

Odpowiedz

16

Czy próbowałeś ustawić Button1 jako AsyncPostBackTrigger w sekcji Wyzwalacze? Ustaw właściwość ChildrenAsTriggers na true i właściwość UpdateMode na 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

Dziękuję bardzo! – user53885

+0

Sekcja uruchamiająca z asyncpostbacktrigger zrobiła mój dzień, dziękuję bardzo !! – BitQuestions

+0

Czy ktoś może wyjaśnić, dlaczego ten jawny wyzwalacz asynchroniczny jest wymagany? Czy kontrole w module UpdatePanel nie powinny domyślnie powodować częściowej aktualizacji strony? – drizin

6

Nie widzę etykiety 2 w powyższym przykładzie kodu. Jeśli Label2 znajduje się poza UpdatePanel, nastąpi pełne odświeżenie strony, ponieważ jest to wymagane, aby strona poprawnie aktualizowała Label2.

Domyślnie, UpdatePanels będzie tylko dynamicznie odświeżać zawartość w nich, po uruchomieniu przez kontrolki w nich. Jeśli potrzebujesz aktualizacji, powiedz przycisk znajdujący się poza panelem, powodując odświeżenie lub etykietę w innym panelu, musisz ustawić atrybut warunkowy w swoich UpdatePanel (ach) i wykonać ręczne aktualizacje połączeń w twoim kodzie.

+0

Dziękuję bardzo! – user53885

2

Ustaw ChildrenAsTriggers="true" na formancie UpdatePanel.

2

„Domyślnie UpdatePanels tylko dynamicznie odświeżyć zawartość w nich, gdy wywołane przez kontrole wewnątrz nich.”

W przeciwnym razie cała strona zostanie odświeżona! O to chodzi!

2

Innym możliwym powodem jest to, że jeśli strona ma wartość ClientIDMode="static", elementy sterujące, od których oczekuje się odświeżenia tylko UpdatePanel, odświeżą całą stronę.

Aby rozwiązać problem, wystarczy ustawić ClientIDMode="AutoID" na elementach sterujących, które powinny wywołać post UpdatePanel.