2010-03-30 12 views

Odpowiedz

79

Możesz użyć właściwości Triggers UpdatePanel, aby zarejestrować akcje, które wywołają pełny odświeżenie.

Dodaj obiekt PostBackTrigger do tej właściwości, zawierający ControlID formantu, który musi wywołać pełny odświeżenie.

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
     ... 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="myFullPostBackControlID" /> 
    </Triggers> 
</asp:UpdatePanel> 
+0

Mam Infragistics UltraWebGrid z kolumną składającą się z przycisków. Miałem problem z kliknięciem przycisków, które uruchamiałyby ich programy obsługi zdarzeń, które z kolei odświeżyłyby sieć, ale siatka nie odświeżyłaby się widocznie aż do drugiego kliknięcia. Umieszczenie przycisków w panelu UpdatePanel i dodanie tych wyzwalaczy rozwiązało problem. – tsilb

12

Od here:

Regulatorem PostBackTrigger celu umożliwienia kontroli wewnątrz UpdatePanel powoduje odświeżenie strony zamiast wykonywania asynchronicznego odświeżenie strony.

<Triggers> 
    <asp:PostBackTrigger ControlID="controlID" /> 
</Triggers> 
+1

+1 - Zbyt szybko @Aseem! – dugas

+0

Hmm tak, ale nie zadziała, jeśli w tym UpdatePanel masz na przykład GridView z numerami stron. Przejdź na nową stronę, a wyzwalacze przestają działać. – Fandango68

42

Po prostu to dodam, ponieważ nikt inny nie ma. Można to zrobić z opóźnieniem kodu w jednym wierszu kodu bez żadnej z powyższych metod. Wystarczy umieścić to w page_load:

Visual Basic

ScriptManager.GetCurrent(Me).RegisterPostBackControl(myButtonID) 

C#

ScriptManager.GetCurrent(this).RegisterPostBackControl(myButtonID); 
+0

Bardzo ładne, po godzinach poszukiwań wreszcie rozwiązanie, które działa. Problem polegał na tym, że wszystkie moje kontrolki (panel aktualizacji i przycisk) były tworzone w kodzie, więc nie można było ustawić funkcji postbacktrigger. Dzięki! – OverMars

+2

Powinieneś być w stanie.Po utworzeniu kontroli można użyć AddHandler do utworzenia wyzwalacza do podprogramu – EvilDr

+0

Absolutnie w porządku, jest tak prosty i właśnie tam jestem prawie zakłopotany, nigdy nie przyszło mi to do głowy. Bardzo miło .. – OverMars

0

miałem ten sam problem przy użyciu ImageButton wewnątrz WebDataGrid.

Zamiast tego wstawiłem linię od EvilDr wewnątrz preRender dla webdatagrid. Pracował świetnie!

for (int i = 0; i < wdgMyData.Rows.Count; i++) 
{ 
    ScriptManager.GetCurrent(this).RegisterPostBackControl((ImageButton)wdgMyData.Rows[i].Items[3].FindControl("btnDownloadExcel")); 
} 
0

Jego stary pytanie jest trochę skomplikowane podejście, jak również, gdy wszystko jest w paneli aktualizacji i chcesz zrobić cały post z powrotem tak, że document.ready kod działa na kliknięcie.

1. Tworzenie obojętne przycisk poza panelu aktualizacji i kliknij go z kodu za jak to

ScriptManager.RegisterStartupScript(Page, this.GetType(), "ResetDoc", "ResetDocumentReady();", true); 

2. Zdefiniuj funkcję na przednim końcu tak

function ResetDocumentReady() { 
     $("[id$=DummyButton]").click(); 
    } 

UWAGA: Najlepszym sposobem jest użycie wyzwalacza, odpowiedź wysłana przez @Thibault Falise :)

Powiązane problemy