Ein UpdatePanel ersetzt den Inhalt des Update-Panels bei einem Update vollständig. Dies bedeutet, dass die von Ihnen abonnierten Ereignisse nicht mehr abonniert werden, da das Update-Fenster neue Elemente enthält.
Um dies zu umgehen, habe ich die Ereignisse, die ich nach jedem Update benötige, erneut abonniert. Ich verwende es $(document).ready()
für das anfängliche Laden und verwende dann Microsoft PageRequestManager
(verfügbar, wenn Sie ein Update-Panel auf Ihrer Seite haben), um jedes Update erneut zu abonnieren.
$(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
});
Das PageRequestManager
ist ein JavaScript - Objekt , das automatisch zur Verfügung, wenn ein Update - Panel auf der Seite. Sie sollten nichts anderes als den obigen Code tun müssen, um ihn zu verwenden, solange sich das UpdatePanel auf der Seite befindet.
Wenn Sie eine detailliertere Steuerung benötigen, übergibt dieses Ereignis Argumente, die der Übergabe von .NET-Ereignissen ähneln, (sender, eventArgs)
sodass Sie sehen können, was das Ereignis ausgelöst hat, und nur bei Bedarf erneut binden können.
Hier ist die neueste Version der Dokumentation von Microsoft: msdn.microsoft.com/.../bb383810.aspx
Eine bessere Option, die Sie je nach Ihren Anforderungen haben können, ist die Verwendung von jQuery's .on()
. Diese Methoden sind effizienter als das erneute Abonnieren von DOM-Elementen bei jedem Update. Lesen Sie jedoch die gesamte Dokumentation, bevor Sie diesen Ansatz verwenden, da er möglicherweise Ihren Anforderungen entspricht oder nicht. Es gibt eine Menge von jQuery - Plugins , die auf refactor zu verwenden unangemessen wären , .delegate()
oder .on()
in den Fällen, so, du ist besser dran Wiederzeichn.