Un UpdatePanel reemplaza completamente el contenido del panel de actualización en una actualización. Esto significa que los eventos a los que se suscribió ya no están suscritos porque hay nuevos elementos en ese panel de actualización.
Lo que he hecho para solucionar esto es volver a suscribirme a los eventos que necesito después de cada actualización. Lo uso $(document).ready()
para la carga inicial, luego uso Microsoft PageRequestManager
(disponible si tiene un panel de actualización en su página) para volver a suscribirse a cada actualización.
$(document).ready(function() {
// bind your jQuery events here initially
});
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function() {
// re-bind your jQuery events here
});
El PageRequestManager
es un objeto de JavaScript que está disponible automáticamente si hay un panel de actualización en la página. No debería necesitar hacer nada más que el código anterior para usarlo siempre que UpdatePanel esté en la página.
Si necesita un control más detallado, este evento pasa argumentos similares a cómo se pasan los eventos .NET (sender, eventArgs)
para que pueda ver qué provocó el evento y solo volver a vincular si es necesario.
Aquí está la última versión de la documentación de Microsoft: msdn.microsoft.com/.../bb383810.aspx
Una mejor opción que pueda tener, según sus necesidades, es usar jQuery's .on()
. Estos métodos son más eficientes que volver a suscribirse a elementos DOM en cada actualización. Sin embargo, lea toda la documentación antes de utilizar este enfoque, ya que puede o no satisfacer sus necesidades. Hay muchos complementos de jQuery que no sería razonable refactorizar para usar .delegate()
o .on()
, por lo tanto, en esos casos, es mejor volver a suscribirse.