2010-10-19 21 views
16

No pude encontrar algo similar en SO.Postback parcial con Javascript

En ASP.NET, ¿hay alguna manera de que en el momento justo que pueda provocar una devolución de datos parcial con Javascript en un UpdatePanel?
Intenté __doPostBack() pero hace una devolución de datos completa.
me puede engañar con un botón ficticio y el fuego click() luego manejar la devolución parcial de esa manera, pero quiero una manera más elegante de engaño.

Gracias.

Edit: encontraron esta disturbedbuddha.wordpress.com/2007/11/26/ ... pero no puedo conseguir que funcione = (
Me encantaría que este método funcione, es perfecto para mí Hasta ahora lo que se puede hacer con este último método es! obtener referencia al temporizador. Con el temporizador desactivado inicialmente, no parece que iniciar el temporizador genere una devolución de datos. Sin embargo, sin Ajax, si simplemente tengo el temporizador habilitado inicialmente, se devuelve a intervalos bien; por qué no puede la llamada Ajax lo causa?

+1

he hecho esto es el pasado. ¿cómo? la maniquí :) botón oculto, conviértalo en un desencadenador asíncrono, luego activa el evento click. Me encantaría saber una mejor manera también. el problema es que el panel de actualización necesita un activador, mediante un control que es 'postback-able' (botón, ddl, etc.). – RPM1984

Respuesta

31

Puede hacer uso de AsyncPostBackTrigger con UpdatePanel para hacer esto. Porque necesita algo que pueda desencadenar un evento, usar un botón es bastante simple y cuando está oculto funciona bien

Si este es su margen de beneficio:

<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;" /> 

Cuando se desea que el panel se actualiza, sólo tiene que llamar:

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

Esto hará que ASP.NET pensar que se ha hecho clic y ReloadThePanel el JavaScript generado automáticamente debido al desencadenador manejará el resto.

EDITAR

Usted puede hacer una actualización de JavaScript puro del UpdatePanel sin ningún activador o botones ocultos. Solo tiene que invocar __doPostBack con la ID del lado del cliente como primer argumento.

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

¿Puedo preguntarte esto entonces? Solo quiero saber el beneficio de esto. Si omito la sección , y en Javascript simplemente disparo el evento click del botón, ¿no hará eso el mismo efecto? ¿Por qué usar la sección ? – BeemerGuy

+0

Si omite la sección Triggers y simplemente "hace clic" en el botón, publicará toda la página. Si especifica desencadenantes, ASP.NET generará JavaScript para "atrapar" el clic y realizar la actualización a través de AJAX en lugar de enviar una página completa. –

+0

¿Pero no es así como Ajax ya funciona? Es por eso que estoy confundido al respecto. Si realmente muestro un botón dentro de un panel de actualización, y realmente hago clic en él, ¿no publicaría solo esa sección?¿Por qué la activación de clics específica a través de Javascript no se capta como un clic real? – BeemerGuy

2

utilicé respuesta @MatthewJacobs', pero me pareció que la llamada a __doPostBack provocó una excepción en tiempo de ejecución en IE11. Descubrí que la llamada al __doPostBack puede reemplazarse por la siguiente llamada de JavaScript, que funcionó en ambos navegadores que probé (IE11 y Chrome 52).

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

Ver Sys.WebForms.PageRequestManager.beginAsyncPostBack Method para más detalles.

Cuestiones relacionadas