2012-09-20 9 views
5

In un'applicazione Web ASP.NET 4.0, ho un controllo utente che è racchiuso da un UpdatePanel (vedere il codice seguente).Come forzare il pulsante per fare un postback completo invece del postback asincrono

<asp:UpdatePanel ID="UpdatePanel5" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <UC:MyCustomCtrl ID="customCtrl" runat="server" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Ovviamente, questo funziona alla grande per tutti i controlli ASP.NET che causa un postback nel mio controllo utente perché rende verificano in modo asincrono. Tuttavia,, c'è una procedura per cui questo non funziona!

Ho un pulsante ASP.NET (Crea rapporto) nel controllo utente che effettua una richiesta asincrona al server. Il server crea quindi un foglio di calcolo Excel e quindi inserisce il foglio di calcolo in HttpResponse per rimandarlo al browser del client in modo che possa aprirlo/salvarlo. Tuttavia, scoppia a questo punto perché la richiesta al server è asincrona e apparentemente non è possibile inserire un binario in HttpResponse durante una richiesta asincrona.

Come aggirare questo?

risposta

11

Registra questo tasto il controllo postback sincrono nel metodo di controllo utente Page_Load: ScriptManager.GetCurrent(Page).RegisterPostBackControl(CreateReportButton);

+0

Grazie. Sono arrivato a una risposta simile non molto tempo fa. Ma sono essenzialmente la stessa cosa: registrare il controllo con ScriptManager. Nel mio caso si tratta di trovare il controllo sul controllo utente e quindi di registrarlo con ScriptManager. – Jagd

0

Utilizzare i trigger all'interno del pannello di aggiornamento per fare riferimento al controllo personalizzato e un evento registrato sul pulsante di segnalazione all'interno del controllo, ad es.

<Triggers> 
    <asp:PostBackTrigger ControlID="customCtrl" EventName="ReportButtonClicked" /> 
</Triggers> 
+0

Già provato. Il pulsante si trova all'interno del controllo personalizzato e il tentativo di utilizzare il nome del pulsante come trigger non verrà nemmeno compilato. – Jagd

+0

A destra, sarà necessario registrare un evento nel controllo personalizzato e quindi fare riferimento in questo modo, verrà modificato. – Turnkey

0

è possibile aggiungere i trigger per UpdatePanels che permettono intero post indietro. ecco un esempio

<asp:UpdatePanel ID="UpdatePanel5" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate> 
     <UC:MyCustomCtrl ID="customCtrl" runat="server" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="btnID" /> 
    </Triggers> 
</asp:UpdatePanel> 
+0

Già provato. Il pulsante si trova all'interno del controllo personalizzato e il tentativo di utilizzare il nome del pulsante come trigger non verrà nemmeno compilato. – Jagd

+0

Quindi è possibile rimuovere quel particolare controllo utente dal pannello di aggiornamento? –

0

Simile alla risposta di Eric. Non ho provato questo, ma potrebbe funzionare ...

<asp:UpdatePanel ID="UpdatePanel5" runat="server"> 
    <ContentTemplate> 
     <UC:MyCustomCtrl ID="customCtrl" runat="server" /> 
    </ContentTemplate> 
    <Triggers> 
     <asp:PostBackTrigger ControlID="customCtrl$btnID" /> 
    </Triggers> 
</asp:UpdatePanel> 

Ho fatto qualcosa di simile a questo un po 'indietro per i controlli di validazione, così sembra logico che funziona anche qui.

Utilizza il tuo visualizzatore DOM (utilizzo l'elemento di controllo dell'elemento di Chrome) e scopri quale sia il "NOME" del tuo pulsante (non l'ID). E a partire dalla parte che contiene il nome del controllo utente generale, usa il resto.

Problemi correlati