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.