UpdatePanel całkowicie zastępuje zawartość panelu aktualizacji podczas aktualizacji. Oznacza to, że subskrybowane wydarzenia nie są już subskrybowane, ponieważ w tym panelu aktualizacji znajdują się nowe elementy.
Aby to obejść, subskrybuję wydarzenia, których potrzebuję po każdej aktualizacji. Używam $(document).ready()
do początkowego ładowania, a następnie używam Microsoft PageRequestManager
(dostępny, jeśli masz panel aktualizacji na swojej stronie), aby ponownie subskrybować każdą aktualizację.
$(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
});
Jest PageRequestManager
to obiekt javascript, który jest automatycznie dostępny, jeśli na stronie znajduje się panel aktualizacji. Nie powinieneś robić nic innego niż powyższy kod, aby go używać, dopóki UpdatePanel jest na stronie.
Jeśli potrzebujesz bardziej szczegółowej kontroli, to zdarzenie przekazuje argumenty podobne do argumentów przekazywanych w zdarzeniach platformy .NET, (sender, eventArgs)
dzięki czemu można zobaczyć, co wywołało zdarzenie, i ponownie powiązać tylko w razie potrzeby.
Oto najnowsza wersja dokumentacji firmy Microsoft: msdn.microsoft.com/.../bb383810.aspx
Lepszą opcją, jaką możesz mieć, w zależności od potrzeb, jest użycie jQuery's .on()
. Te metody są bardziej wydajne niż ponowne subskrybowanie elementów DOM przy każdej aktualizacji. Przeczytaj całą dokumentację, zanim zastosujesz to podejście, ponieważ może ono, ale nie musi, odpowiadać Twoim potrzebom. Istnieje wiele wtyczek jQuery że byłoby nierozsądne byłaby do wykorzystania .delegate()
lub .on()
, więc w tych przypadkach, jesteś lepiej ponownym śledzeniem.