Come si forza il post-back completo da un pulsante all'interno di un UpdatePanel?Come posso forzare il post-back completo da un pulsante all'interno di un UpdatePanel?
risposta
È 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>
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 - Troppo veloce @Aseem! – dugas
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
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);
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
Dovresti poterlo fare.Quando viene creato il controllo, è possibile utilizzare AddHandler per creare il trigger per la sottoroutine di risposta – EvilDr
Assolutamente giusto, è così semplice e proprio lì sono quasi imbarazzato non mi è mai venuto in mente. Molto bello però ... – OverMars
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"));
}
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 :)
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