Bir UpdatePanel, bir güncellemedeki güncelleme panelinin içeriğini tamamen değiştirir. Bu, bu güncelleme panelinde yeni öğeler olduğu için abone olduğunuz etkinliklerin artık abone olmadığı anlamına gelir.
Bu sorunu çözmek için yaptığım, her güncellemeden sonra ihtiyacım olan olaylara yeniden abone olmak. $(document).ready()
İlk yükleme için kullanırım , ardından PageRequestManager
her güncellemeye yeniden abone olmak için Microsoft'un (sayfanızda bir güncelleme paneliniz varsa kullanılabilir) kullanı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
});
Bu PageRequestManager
, sayfada bir güncelleme paneli varsa otomatik olarak kullanılabilen bir javascript nesnesidir. UpdatePanel sayfada olduğu sürece kullanmak için yukarıdaki koddan başka bir şey yapmanız gerekmez.
Daha ayrıntılı kontrole ihtiyacınız varsa, bu olay, .NET olaylarının bağımsız değişkenlerden nasıl geçirildiğine benzer argümanlar geçirir, (sender, eventArgs)
böylece olayı neyin yükselttiğini görebilir ve yalnızca gerektiğinde yeniden bağlayabilirsiniz.
Microsoft'un belgelerinin en son sürümü: msdn.microsoft.com/.../bb383810.aspx
İhtiyaçlarınıza bağlı olarak sahip olabileceğiniz daha iyi bir seçenek, jQuery'leri kullanmaktır .on()
. Bu yöntem, her güncellemede DOM öğelerine yeniden abone olmaktan daha etkilidir. Ancak, bu yaklaşımı kullanmadan önce tüm belgeleri okuyun, çünkü ihtiyaçlarınızı karşılayabilir veya karşılamayabilir. Kullanmak için refactor için mantıksız olacak bir sürü jQuery eklentisi vardır, .delegate()
ya da .on()
bu gibi durumlarda, yeniden abone olmanız daha iyi olur.