2010-10-19 19 views
16

Impossibile trovare qualcosa di simile in SO.Postback parziale con Javascript

In ASP.NET, esiste un modo che al momento giusto possa causare un postback parziale con Javascript in un UpdatePanel?
Ho provato __doPostBack() ma fa un postback completo.
Posso ingannarlo con un pulsante fittizio e sparare click() quindi gestire il postback parziale in questo modo, ma voglio un modo più aggraziato rispetto a un trucco.

Grazie.

Edit: ho trovato questo disturbedbuddha.wordpress.com/2007/11/26/ ... ma non riesco a farlo funzionare = (
mi piacerebbe per questo metodo di lavorare: è perfetto per me Finora cosa posso fare usando questo ultimo metodo è! guadagno il riferimento al timer .. Con il timer inizialmente disabilitato, l'avvio del timer non sembra causare un postback.Tuttavia, senza Ajax, se ho semplicemente il timer abilitato inizialmente, torna a intervalli perfettamente, perché non può la chiamata Ajax lo causa?

+1

ho fatto questo è il passato. Come? la via fittizia. :) Pulsante nascosto, renderlo un trigger asincrono, quindi attivare l'evento click. mi piacerebbe anche conoscere un modo migliore. il problema è che updatepanel necessita di un trigger, da un controllo che è "postback-able" (pulsante, ddl, ecc.). – RPM1984

risposta

31

È possibile utilizzare un AsyncPostBackTrigger con UpdatePanel per eseguire questa operazione. Poiché è necessario qualcosa che può generare un evento, l'utilizzo di un pulsante è abbastanza semplice e quando nascosto funziona in modo corretto.

Se questo è il vostro markup:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" OnLoad="UpdatePanel1_Load"> 
    <ContentTemplate> 
     <!-- Contents... --> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ReloadThePanel" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel> 
<asp:Button ID="ReloadThePanel" runat="server" style="display:none;" /> 

Quando si desidera il pannello da aggiornare, basta chiamare:

__doPostBack('<%=ReloadThePanel.ClientID %>', null); 

Questo renderà ASP.NET pensare che ReloadThePanel stato cliccato e il JavaScript generato automaticamente a causa del trigger gestirà il resto.

EDIT

Si può fare un aggiornamento puro JavaScript del UpdatePanel, senza alcun trigger o pulsanti nascosti. Hai solo bisogno di invocare __doPostBack con l'ID lato client come primo argomento.

__doPostBack('<%=UpdatePanel1.ClientID %>', null); 
+0

Posso chiederti questo allora? Voglio solo sapere il beneficio di questo. Se ometto la sezione , e in Javascript faccio semplicemente clic sull'evento click del pulsante, non farò lo stesso effetto? Perché utilizzare la sezione ? – BeemerGuy

+0

Se si omette la sezione Trigger e si fa semplicemente "clic" sul pulsante, verrà postata l'intera pagina. Se si specificano i trigger, ASP.NET genererà JavaScript per "catturare" il clic e fare l'aggiornamento tramite AJAX anziché un'intera pagina inoltrata. –

+0

Ma non è così che Ajax funziona già? Ecco perché sono confuso a riguardo. Se in realtà mostro un pulsante all'interno di un pannello di aggiornamento, e in realtà lo clicco, non pubblicherebbe solo quella sezione?Perché lo specifico click-triggering tramite Javascript non viene catturato come un vero clic? – BeemerGuy

2

ho usato risposta @MatthewJacobs' ma ho scoperto che la chiamata a __doPostBack ha causato un'eccezione di runtime su IE11. Ho trovato che la chiamata a __doPostBack può essere sostituita dalla seguente chiamata JavaScript, che ha funzionato su entrambi i browser che ho testato (IE11 e Chrome 52).

Sys.WebForms.PageRequestManager.getInstance().beginAsyncPostBack(
    [ '<%=UpdatePanel1.ClientID %>' ], '<%=UpdatePanel1.ClientID %>', null 
); 

Vedere Sys.WebForms.PageRequestManager.beginAsyncPostBack Method per ulteriori dettagli.

Problemi correlati