Ein UpdatePanel ersetzt den Inhalt des Update-Panels bei einer Aktualisierung vollständig. Das bedeutet, dass die Ereignisse, die Sie abonniert haben, nicht mehr abonniert sind, da sich neue Elemente in diesem UpdatePanel befinden.
Um dieses Problem zu umgehen, habe ich mich nach jeder Aktualisierung erneut für die benötigten Ereignisse angemeldet. Ich verwende $(document).ready()
für die anfängliche Belastung, dann verwenden Sie Microsofts PageRequestManager
(verfügbar, wenn Sie ein Aktualisierungspanel auf Ihrer Seite haben), um sich bei jeder Aktualisierung neu anzumelden.
$(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
});
El PageRequestManager
ist ein Javascript-Objekt, das automatisch verfügbar ist, wenn sich ein Aktualisierungsfeld auf der Seite befindet. Solange sich das UpdatePanel auf der Seite befindet, sollten Sie außer dem obigen Code nichts weiter tun müssen, um es zu verwenden.
Wenn Sie eine detailliertere Steuerung benötigen, übergibt dieses Ereignis Argumente ähnlich wie .NET-Ereignisse Argumente übergeben (sender, eventArgs)
damit Sie sehen können, was das Ereignis ausgelöst hat, und nur bei Bedarf neu binden.
Hier finden Sie die neueste Version der Dokumentation von Microsoft: msdn.microsoft.com/.../bb383810.aspx
Eine bessere Option, die Sie je nach Ihren Bedürfnissen haben, ist die Verwendung der jQuery-Funktion .on()
. Diese Methoden sind effizienter als das erneute Abonnieren von DOM-Elementen bei jeder Aktualisierung. Lesen Sie jedoch die gesamte Dokumentation, bevor Sie diesen Ansatz verwenden, da er Ihren Anforderungen entsprechen kann oder auch nicht. Es gibt viele jQuery-Plugins, bei denen es unvernünftig wäre, sie so umzugestalten, dass sie .delegate()
o .on()
In diesen Fällen ist es besser, wenn Sie sich neu anmelden.