Un UpdatePanel sostituisce completamente il contenuto del pannello di aggiornamento su un aggiornamento. Questo significa che quegli eventi a cui ti sei iscritto non sono più iscritti perché ci sono nuovi elementi in quel pannello di aggiornamento.
Quello che ho fatto per ovviare a questo problema è di ri-abbonarmi agli eventi di cui ho bisogno dopo ogni aggiornamento. Uso $(document).ready()per il caricamento iniziale, quindi uso Microsoft PageRequestManager(disponibile se hai un pannello di aggiornamento sulla tua pagina) per abbonare nuovamente ogni aggiornamento.
$(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
});
La PageRequestManagerè un oggetto JavaScript che è automaticamente disponibile se un pannello di aggiornamento è sulla pagina. Non dovresti dover fare altro che il codice sopra per usarlo fintanto che UpdatePanel è sulla pagina.
Se hai bisogno di un controllo più dettagliato, questo evento passa argomenti simili a come gli eventi .NET vengono passati a argomenti in (sender, eventArgs)modo da poter vedere cosa ha generato l'evento e ricollegarlo solo se necessario.
Ecco l'ultima versione della documentazione di Microsoft: msdn.microsoft.com/.../bb383810.aspx
Un'opzione migliore che potresti avere, a seconda delle tue esigenze, è quella di utilizzare jQuery .on(). Questi metodi sono più efficienti della nuova iscrizione agli elementi DOM su ogni aggiornamento. Leggere tutta la documentazione prima di utilizzare questo approccio, poiché potrebbe soddisfare o meno le proprie esigenze. Esistono molti plug-in jQuery che potrebbero essere irragionevoli da utilizzare come refactor .delegate()o .on(), quindi, in questi casi, è meglio abbonarsi nuovamente.