UpdatePanel повністю замінює вміст панелі оновлення оновлення. Це означає, що ті події, на які ви підписалися, більше не підписані, оскільки на цій панелі оновлення є нові елементи.
Що я зробив, щоб подолати це, це повторна підписка на потрібні мені події після кожного оновлення. Я використовую $(document).ready()
для початкового завантаження, потім використовуйте Microsoft PageRequestManager
(доступний, якщо на вашій сторінці є панель оновлень), щоб повторно передплатити кожне оновлення.
$(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
});
Це PageRequestManager
об'єкт javascript, який автоматично доступний, якщо на сторінці знаходиться панель оновлення. Вам не потрібно робити нічого, окрім наведеного вище коду, щоб використовувати його до тих пір, поки UpdatePanel знаходиться на сторінці.
Якщо вам потрібен більш детальний контроль, ця подія передає аргументи, подібні до того, як .NET події передаються аргументами, (sender, eventArgs)
щоб ви могли бачити, що викликало подію, і лише повторно зв'язувати, якщо потрібно.
Ось остання версія документації від Microsoft: msdn.microsoft.com/.../bb383810.aspx
Кращим варіантом, який ви можете мати, залежно від ваших потреб, є використання jQuery .on()
. Цей метод є більш ефективним, ніж повторна підписка на елементи DOM під час кожного оновлення. Прочитайте всю документацію, перш ніж використовувати цей підхід, оскільки він може відповідати вашим потребам. Існує багато плагінів jQuery, які нерозумно використовуватимуть рефактори, .delegate()
або .on()
, тому в цих випадках вам краще повторно підписатися.