2010-03-30 3 views

risposta

79

È possibile utilizzare la proprietà Triggers di UpdatePanel per registrare le azioni che attivano un postback completo.

Aggiungere un oggetto PostBackTrigger a tale proprietà, contenente il ControlID del controllo che deve attivare un completo postback.

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

Possiedo un UltraWebGrid Infragistics con una colonna costituita da pulsanti. Ho avuto un problema in cui facendo clic sui pulsanti si attivavano i gestori di eventi, che a loro volta aggiornavano la griglia, ma la griglia non si aggiornava effettivamente fino al secondo clic. Inserire i pulsanti in un UpdatePanel e aggiungere questi trigger ha risolto il problema. – tsilb

12

Da here:

Utilizzare il controllo PostBackTrigger attivare i controlli all'interno di un UpdatePanel per causare un postback invece di eseguire un postback asincrono.

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

+1 - Troppo veloce @Aseem! – dugas

+0

Hmm si, ma non funzionerà se all'interno di UpdatePanel si dispone di un GridView con numeri di pagina, ad esempio. Passa a una nuova pagina e i trigger non funzionano più. – Fandango68

42

Basta aggiungere questo perché nessun altro ha. È possibile farlo in code-behind in una riga di codice senza nessuno dei metodi precedenti. Basta mettere questo in Page_Load:

Visual Basic

ScriptManager.GetCurrent(Me).RegisterPostBackControl(myButtonID) 

C#

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

Molto bello, dopo ore di ricerca, finalmente una soluzione che funziona. Il problema era che tutti i miei controlli (pannello di aggiornamento e pulsante) venivano creati nel codice, quindi non era possibile impostare un postbacktrigger. Grazie! – OverMars

+2

Dovresti poterlo fare.Quando viene creato il controllo, è possibile utilizzare AddHandler per creare il trigger per la sottoroutine di risposta – EvilDr

+0

Assolutamente giusto, è così semplice e proprio lì sono quasi imbarazzato non mi è mai venuto in mente. Molto bello però ... – OverMars

0

Ho avuto lo stesso problema con un ImageButton all'interno di un WebDataGrid.

Ho messo la linea da EvilDr all'interno del preRender per il webdatagrid. Ha funzionato alla grande!

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

La sua una vecchia questione non v'è l'approccio po 'complicato e, quando tutto è in pannelli aggiornamento e si vuole fare post completo indietro in modo che il codice document.ready lavora al clic.

1. Creare un pulsante fittizio di fuori del pannello di aggiornamento e fare clic su esso dal codice dietro come questo

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

2. definire la funzione sulla parte frontale come questo

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

NOTA: Ma il modo migliore è usare il trigger, la risposta pubblicata da @Thibault Falise :)

Problemi correlati