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
เป็นวัตถุจาวาสคริปต์ที่สามารถใช้ได้โดยอัตโนมัติหากแผงปรับปรุงอยู่บนหน้า คุณไม่จำเป็นต้องทำอะไรนอกจากรหัสด้านบนเพื่อใช้งานตราบใดที่ UpdatePanel อยู่ในหน้า
หากคุณต้องการการควบคุมอย่างละเอียดมากขึ้นเหตุการณ์นี้ส่งผ่านข้อโต้แย้งที่คล้ายกับว่าเหตุการณ์. NET ผ่านการขัดแย้งกันอย่างไร (sender, eventArgs)
เพื่อให้คุณเห็นว่าเหตุการณ์ที่เกิดขึ้นนั้นเกิดขึ้นและผูกใหม่ได้เฉพาะเมื่อจำเป็น
นี่คือเอกสารเวอร์ชันล่าสุดจาก Microsoft: msdn.microsoft.com/.../bb383810.aspx
ตัวเลือกที่ดีคุณอาจจะต้องขึ้นอยู่กับความต้องการของคุณคือการใช้ของ .on()
jQuery วิธีการเหล่านี้มีประสิทธิภาพมากกว่าการสมัครสมาชิกองค์ประกอบ DOM ใหม่ทุกครั้งที่อัพเดท อ่านเอกสารทั้งหมดก่อนที่คุณจะใช้วิธีการนี้เนื่องจากอาจเป็นไปตามที่คุณต้องการ มีปลั๊กอิน jQuery จำนวนมากที่ไม่เหมาะสมในการใช้ refactor .delegate()
หรือ.on()
ดังนั้นในกรณีเหล่านี้คุณควรสมัครสมาชิกใหม่