การแปล: วาเลนส์
เวลา: 11-06-2550
ข้อความต้นฉบับ: http://ajax.asp.net/docs/overview/AJAXClientEvents.aspx
ทุกคนยินดีที่จะแสดงความคิดเห็นและฉันจะทำการแก้ไขอย่างแข็งขัน!
บทนำ [บทนำ]
Microsoft Ajax เสนอเหตุการณ์วงจรชีวิตฝั่งไคลเอ็นต์ที่คล้ายกับเหตุการณ์วงจรชีวิตฝั่งเซิร์ฟเวอร์ของเพจ ASP.NET 2.0 เหตุการณ์ฝั่งไคลเอ็นต์เหล่านี้ช่วยให้เราปรับแต่งอินเทอร์เฟซผู้ใช้ของเราสำหรับทั้ง postback แบบเดิมและ postback แบบอะซิงโครนัส (การรีเฟรชหน้าบางส่วน) นอกจากนี้ยังสามารถช่วยคุณจัดการและใช้สคริปต์แบบกำหนดเองได้ตลอดวงจรการใช้งานเพจ
เหตุการณ์ฝั่งไคลเอ็นต์เหล่านี้ถูกเสนอในคลาส AJAX Libray ของ Microsoft (เราสามารถพบได้ในคลาส AJAX Libray) คลาสเหล่านี้จะสร้างอินสแตนซ์โดยอัตโนมัติ (สร้างอินสแตนซ์?) เมื่อโหลดการควบคุมเซิร์ฟเวอร์ด้วย AJAX คลาสเหล่านี้มี API บางตัวเพื่อให้เราสามารถผูกเหตุการณ์กับตัวจัดการผู้ให้บริการเหตุการณ์ได้ และไลบรารี AJAX นั้นไม่ขึ้นอยู่กับเบราว์เซอร์ ดังนั้นโค้ดที่คุณเขียนจึงใช้ได้กับเบราว์เซอร์ที่รองรับทั้งหมด
เหตุการณ์สำคัญคือเหตุการณ์การโหลดของอินสแตนซ์แอปพลิเคชันที่เริ่มต้นคำขอและ postback แบบอะซิงโครนัส เมื่อสคริปต์ถูกรันในระหว่างเหตุการณ์ตัวจัดการโหลด สคริปต์และส่วนประกอบทั้งหมดจะถูกโหลดและพร้อมใช้งาน เมื่อส่วนหนึ่งของเพจถูกรีเฟรชโดยใช้ตัวควบคุม UpdatePanel เหตุการณ์ที่สำคัญที่สุดของไคลเอ็นต์ทั้งหมดคือคลาส PageRequestManager เหตุการณ์ฝั่งไคลเอ็นต์เหล่านี้ช่วยให้คุณสามารถใช้สถานการณ์บางอย่างได้ ตัวอย่างได้แก่: การเลิกทำการ postbacks การตั้งค่าลำดับความสำคัญที่สูงขึ้นสำหรับ postback และทำให้ UpdatePanel โต้ตอบได้ดีขึ้นเมื่อรีเฟรช
กิจกรรมเหล่านี้มีประโยชน์มากสำหรับเราในการสร้างเพจหรือเขียนส่วนประกอบ หากคุณเป็นนักพัฒนาเว็บ คุณสามารถใช้สคริปต์ที่กำหนดเองในการโหลดและยกเลิกการโหลดเพจได้
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเหตุการณ์วงจรชีวิตฝั่งเซิร์ฟเวอร์ คุณสามารถดูภาพรวมวงจรชีวิตของเพจ ASP.NET
[คลาสไคลเอนต์]
ในไลบรารีคลาส Microsoft AJAX เสนอคลาสหลักสองคลาสในวงจรชีวิตไคลเอนต์ของหน้าเว็บ AJAX : คลาสแอปพลิเคชันและคลาส PageRequestManager
คลาส Application จะถูกสร้างอินสแตนซ์เมื่อเบราว์เซอร์ร้องขอเพจที่มีการควบคุม ScriptManager คลาสแอปพลิเคชันจะคล้ายกับตัวควบคุมเพจฝั่งเซิร์ฟเวอร์ นอกจากนี้ยังสืบทอดมาจากคลาสการควบคุม แต่มีฟังก์ชันเพิ่มเติมบางอย่าง (เมื่อเปรียบเทียบกับเหตุการณ์ฝั่งเซิร์ฟเวอร์) ในทำนองเดียวกัน แอปพลิเคชันสืบทอดคลาส Sys.COmponent นอกจากนี้ ยังมีเหตุการณ์ที่ดำเนินการได้มากมายในระหว่างวงจรชีวิตของไคลเอ็นต์
หากเพจมี ScriptManager และคอนโทรล UpdatePanel ตั้งแต่หนึ่งรายการขึ้นไป เพจนั้นสามารถรับเอฟเฟกต์การอัพเดตบางส่วนได้ ในกรณีนั้น อินสแตนซ์ของคลาส PageRequestManager จะพร้อมใช้งานสำหรับเบราว์เซอร์ เหตุการณ์ไคลเอนต์ที่ PageRequestManager จัดทำนั้นเกี่ยวกับ postback แบบอะซิงโครนัส สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการสร้างเพจบางส่วน โปรดดูที่: ภาพรวมการเรนเดอร์เพจบางส่วน
การเพิ่มตัวจัดการสำหรับเหตุการณ์ไคลเอนต์ [เพิ่มตัวจัดการสำหรับเหตุการณ์ไคลเอนต์]
ตอนนี้ให้เพิ่มหรือลบเหตุการณ์โดยใช้เมธอด add_eventname และ reomve_eventname ในคลาส Application และ PageRequestManager ตัวอย่างต่อไปนี้แสดงวิธีการเพิ่มตัวจัดการชื่อ MyLoad ให้กับเหตุการณ์ init ของออบเจ็กต์ Application
Sys.Application.add_init(MyInit);
ฟังก์ชั่น MyInit (ผู้ส่ง) {
-
Sys.Appplication.remove_init(MyInit);
Comment ตัวอย่างนี้แสดงเฉพาะไวยากรณ์ของการใช้เมธอด add_eventname และ Remove_eventname รายละเอียดเพิ่มเติมเกี่ยวกับการใช้กิจกรรมนี้จะระบุไว้ในหัวข้อต่อๆ ไป
การจัดการเหตุการณ์การโหลดและยกเลิกการโหลดแอปพลิเคชัน [เหตุการณ์การโหลดและยกเลิก
การโหลดของแอปพลิเคชันการดำเนินการ] เพื่อดำเนินการเหตุการณ์การโหลดและยกเลิกการโหลดของแอปพลิเคชันออบเจ็กต์ ไม่จำเป็นต้องผูกเข้ากับเหตุการณ์การดำเนินการอย่างชัดเจน แต่คุณสามารถสร้างฟังก์ชันได้โดยตรงโดยใช้คำสำคัญที่สงวนไว้ pageLoad และ pageUnload ตัวอย่างต่อไปนี้แสดงวิธีการเพิ่มการดำเนินการให้กับเหตุการณ์โหลดของแอปพลิเคชัน
ฟังก์ชั่น pageLoad (ผู้ส่ง args) {
-
เหตุการณ์สำหรับคลาสไคลเอนต์อื่น [คลาสไคลเอนต์อื่น ๆ]
หัวข้อนี้อธิบายเฉพาะเหตุการณ์ที่จัดทำโดยคลาส Application และ PageRequestManager ไลบรารีคลาส AJAX ของ Microsoft ยังมีคลาสต่อไปนี้สำหรับการเพิ่ม การล้าง และการลบเหตุการณ์องค์ประกอบ DOM คลาสเหล่านี้รวมถึง:
มีเมธอด Sys.UI.DomEvent.addHandler หรือชวเลข $addHandler
มีเมธอด Sys.UI.DomEvent.clearHandlers หรือชวเลข $clearHandlers
มีเมธอด Sys.UI.DomEvent.removeHandler หรือชวเลข $ RemoveHandler
เหตุการณ์ที่จัดทำโดยหลักการ DOM จะไม่ถูกกล่าวถึงในหัวข้อนี้
เหตุการณ์ไคลเอนต์ของคลาส Application และ PageRequestManager [เหตุการณ์ไคลเอนต์ของคลาส Application และ PageRequestManager]
ตารางต่อไปนี้แสดงรายการเหตุการณ์ไคลเอนต์ของคลาส Application และ PageRequestManager ที่คุณสามารถใช้ได้ในหน้า AJAX ASP.NET ลำดับเหตุการณ์จะกล่าวถึงในหัวข้อต่อไป
เหตุการณ์
(ชื่อกิจกรรม)
คำอธิบาย
(อธิบาย)
initEvent
[เหตุการณ์การเริ่มต้น]
เหตุการณ์นี้เกิดขึ้นหลังจากโหลดสคริปต์ทั้งหมดแล้วและก่อนที่จะสร้างออบเจ็กต์ใดๆ หากคุณวางแผนที่จะเขียนส่วนประกอบ (สคริปต์) เหตุการณ์ init จะระบุจุดในวงจรชีวิตเพื่อเพิ่มส่วนประกอบ (สคริปต์) ลงในเพจ สคริปต์อื่นสามารถเรียกใช้คอมโพเนนต์นี้ได้ในวงจรชีวิต หากคุณเป็นนักพัฒนาเว็บ ในกรณีส่วนใหญ่ ขอแนะนำให้ใช้เหตุการณ์โหลดแทนเหตุการณ์เริ่มต้น
เหตุการณ์เริ่มต้นจะถูกสร้างขึ้นเพียงครั้งเดียวเมื่อเริ่มสร้างเพจ การรีเฟรชเพจบางส่วนในภายหลังจะไม่ทำให้เกิดเหตุการณ์ init
โหลดเหตุการณ์
[กำลังโหลดกิจกรรม]
เหตุการณ์นี้เกิดขึ้นหลังจากโหลดสคริปต์ทั้งหมดแล้ว และหลังจากสร้างอ็อบเจ็กต์โปรแกรมทั้งหมดที่เริ่มต้นด้วย $create แล้ว เหตุการณ์นี้จะเพิ่มขึ้นตาม postbacks ทั้งหมดไปยังเซิร์ฟเวอร์ รวมถึง postbacks แบบอะซิงโครนัส
หากคุณเป็นนักพัฒนาเว็บ คุณสามารถสร้างฟังก์ชันที่เรียกว่า pageLoad ได้ ซึ่งจัดทำโดยเหตุการณ์การโหลดเอง การดำเนินการ pageLoad (ตัวจัดการ) สามารถเรียกได้หลังจากการดำเนินการใดๆ ที่เพิ่มเข้ากับเหตุการณ์การโหลดผ่านเมธอด add_load
เหตุการณ์การโหลดจำเป็นต้องมีวัตถุ Sys.ApplicationLoadEventArgs เป็นพารามิเตอร์ eventargs คุณสามารถใช้พารามิเตอร์นี้เพื่อตัดสินใจว่าเพจจำเป็นต้องแสดงการรีเฟรชบางส่วนหรือไม่ และคุณยังสามารถตัดสินใจได้ว่าควรสร้างส่วนประกอบใดหลังจากเหตุการณ์การโหลดครั้งล่าสุดเกิดขึ้น
ยกเลิกการโหลดเหตุการณ์
[กิจกรรมถอนการติดตั้ง]
เกิดขึ้นก่อนที่วัตถุทั้งหมดจะถูกปล่อยออกมาและก่อนที่เหตุการณ์ window.unload ของเบราว์เซอร์จะเกิดขึ้น
คุณสามารถจัดการเหตุการณ์ยกเลิกการโหลดผ่านฟังก์ชันที่เรียกว่า pageUnload ที่ระบบจัดเตรียมไว้ให้ เหตุการณ์ pageUnload จะถูกเรียกเมื่อมีการยกเลิกการโหลดเพจในเบราว์เซอร์ ในระหว่างเหตุการณ์นี้ เราควรปล่อยทรัพยากรทั้งหมดที่โค้ดครอบครอง
คุณสมบัติเหตุการณ์การเปลี่ยนแปลง
[กิจกรรมเปลี่ยนคุณสมบัติ]
เพิ่มขึ้นเมื่อคุณสมบัติของส่วนประกอบเปลี่ยนแปลง วัตถุแอปพลิเคชันสืบทอดเหตุการณ์นี้จากคลาสส่วนประกอบ เหตุการณ์นี้เกิดขึ้นเมื่อนักพัฒนาเรียกใช้เมธอด Sys.Component.raisePropertyChange เมื่อตั้งค่าคุณสมบัติ
ดูการกำหนดคุณสมบัติคอมโพเนนต์แบบกำหนดเองและการเพิ่มเหตุการณ์ที่เปลี่ยนแปลงคุณสมบัติสำหรับข้อมูลเพิ่มเติม
เหตุการณ์การเปลี่ยนแปลงคุณสมบัติจำเป็นต้องมีวัตถุ Sys.applicationLoadEventArgs เป็นพารามิเตอร์ eventargs
การกำจัดเหตุการณ์
[กิจกรรมเปิดตัว]
เหตุการณ์นี้เกิดขึ้นเมื่อมีการเผยแพร่อินสแตนซ์ของแอปพลิเคชัน วัตถุแอปพลิเคชันสืบทอดเหตุการณ์นี้จากคลาสส่วนประกอบ
เริ่มต้นเหตุการณ์คำขอ
[กิจกรรมคำขอเริ่มต้น]
เหตุการณ์นี้เกิดขึ้นเมื่อเริ่มต้นคำขอแบบอะซิงโครนัส คุณสามารถใช้เหตุการณ์นี้เพื่อยกเลิก postback แบบเดิมได้ เช่น อนุญาตให้ postback แบบอะซิงโครนัสมีความสำคัญกว่า
เหตุการณ์คำขอเตรียมใช้งานจำเป็นต้องมีพารามิเตอร์ eventargs ที่จัดเตรียมโดยวัตถุ Sys.WebForms.InitializeRequestEventArgs ออบเจ็กต์นี้มีองค์ประกอบที่เป็นประโยชน์ของออบเจ็กต์ที่ทำให้เกิดการย้อนกลับและคำขอพื้นฐาน เหตุการณ์นี้ยังเปิดเผยแอตทริบิวต์ cancel หากคุณตั้งค่าการยกเลิกเป็นจริง ระบบ Postback ใหม่จะถูกยกเลิก
เหตุการณ์ startRequest
[เริ่มกิจกรรมขอ]
เหตุการณ์นี้เกิดขึ้นก่อนที่จะเริ่มการ postback แบบอะซิงโครนัสไปยังเซิร์ฟเวอร์ หากมีกระบวนการ postback อยู่แล้ว กระบวนการนั้นจะหยุดลง (โดยใช้วิธี abortPostBack) คุณสามารถใช้เหตุการณ์นี้เพื่อตั้งค่าส่วนหัวของคำขอหรือแสดงพร้อมท์ (ภาพเคลื่อนไหว) ที่น่าสนใจบนเพจเพื่อระบุว่าคำขอกำลังดำเนินการอยู่
เหตุการณ์นี้ต้องการวัตถุ Sys.WebForms.BeginRequestEventArgs เป็นพารามิเตอร์ eventargs ออบเจ็กต์นี้มีองค์ประกอบที่เป็นประโยชน์ในการทำให้เกิดการย้อนกลับและออบเจ็กต์คำขอพื้นฐาน
กำลังโหลดหน้ากิจกรรม
[กิจกรรมการโหลดหน้า]
เกิดขึ้นก่อนที่เนื้อหาใดๆ บนเพจจะได้รับการอัปเดตเมื่อเซิร์ฟเวอร์ได้รับ postback แบบอะซิงโครนัส คุณสามารถใช้เหตุการณ์นี้เพื่อสร้างเอฟเฟกต์การเปลี่ยนแปลงแบบกำหนดเองสำหรับเนื้อหาที่จำเป็นต้องอัปเดต
เหตุการณ์นี้ต้องการวัตถุ Sys.WebForms.PageLoadingEventArgs เป็นพารามิเตอร์ eventargs ออบเจ็กต์นี้ให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับแผงที่จะถูกลบและอัปเดตอันเป็นผลมาจาก postback แบบอะซิงโครนัสล่าสุด
กิจกรรมเพจโหลดแล้ว
[เหตุการณ์การโหลดหน้าเสร็จสมบูรณ์]
เกิดขึ้นหลังจากรีเฟรชเนื้อหาทั้งหมดของเพจด้วยผลลัพธ์ postback แบบซิงโครนัสหรืออะซิงโครนัส ในระหว่าง Postback แบบซิงโครนัส สามารถสร้างพาเนลได้เท่านั้น แต่ระหว่าง Postback แบบอะซิงโครนัส จะสามารถสร้างและอัปเดตพาเนลได้ คุณสามารถใช้เหตุการณ์นี้เพื่อจัดการเอฟเฟกต์การเปลี่ยนแปลงแบบกำหนดเองสำหรับเนื้อหาที่จำเป็นต้องอัปเดต
เหตุการณ์นี้ต้องการวัตถุ Sys.WebForms.PageLoadedEventArgs เป็นพารามิเตอร์ eventargs ออบเจ็กต์นี้ให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับแผงที่ได้รับการอัปเดตและสร้างระหว่างการส่งกลับครั้งล่าสุด
เหตุการณ์ endRequest
[สิ้นสุดกิจกรรมคำขอ]
เกิดขึ้นหลังจากการ postback แบบอะซิงโครนัสเสร็จสิ้นเพื่อตอบสนองและอัปเดตเพจแล้ว หรือหลังจากเกิดข้อผิดพลาดระหว่างการร้องขอ หากมีข้อผิดพลาดเกิดขึ้น เพจจะไม่ได้รับการอัปเดต ใช้เหตุการณ์นี้เพื่อให้ข้อความแสดงข้อผิดพลาดที่กำหนดเองแก่ผู้เยี่ยมชมหรือเข้าสู่ระบบบันทึกข้อผิดพลาด
เหตุการณ์นี้ต้องการวัตถุ Sys.WebForms.EndRequestEventArgs เป็นพารามิเตอร์ eventargs วัตถุนี้ให้ข้อมูลที่เป็นประโยชน์เกี่ยวกับข้อผิดพลาดที่เกิดขึ้นและข้อผิดพลาดได้รับการจัดการหรือไม่ นอกจากนี้ยังให้ข้อมูลที่มีอยู่เกี่ยวกับวัตถุที่เกี่ยวข้อง
ตัวอย่างลำดับเหตุการณ์ [ตัวอย่างลำดับเหตุการณ์]
ตัวอย่างต่อไปนี้แสดงวิธีการยกเหตุการณ์ฝั่งไคลเอ็นต์บนเพจที่มีตัวควบคุม UpdatePanel ที่ซ้อนกันสองตัว โปรดสังเกตความแตกต่างระหว่างการคลิกปุ่มในแผงหลักและปุ่มในแผงแบบฝัง ปุ่มในแผงหลักจะทำให้แผงหลักได้รับการอัปเดต และแผงที่ฝังอยู่ภายในจะถูกลบและสร้างใหม่ ปุ่มที่มีแผงแบบฝังจะทำให้เกิดการอัพเดตแผงแบบฝังเท่านั้น
รหัสหน้า:
1<%@ ภาษาของเพจ = "C#" %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4 " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
5
6<script runat="เซิร์ฟเวอร์">
7
8</สคริปต์>
9
10<html xmlns=" http://www.w3.org/1999/xhtml " >
11<หัว runat="เซิร์ฟเวอร์">
12 <title>ตัวอย่างเหตุการณ์ไคลเอนต์</title>
13 <style type="text/css">
14 #OuterPanel { ความกว้าง: 600px; ความสูง: 200px; เส้นขอบ: 2px สีน้ำเงินทึบ;
15 #NestedPanel { ความกว้าง: 596px; ความสูง: 60px; เส้นขอบ: 2px สีเขียวทึบ;
16 ขอบซ้าย:5px; ขอบล่าง:5px;}
17 </สไตล์>
18</หัว>
19<ร่างกาย>
20 <form id="form1" runat="server">
21 <div>
22 <asp:ScriptManager ID="ScriptManager1" runat="เซิร์ฟเวอร์">
23 <สคริปต์>
24 <asp:ScriptReference Path="ClientEventTest.js" />
25 </สคริปต์>
26 </asp:ScriptManager>
27 <asp:UpdatePanel ID="OuterPanel" UpdateMode="Conditional" runat="เซิร์ฟเวอร์">
28 <เทมเพลตเนื้อหา>
29 Postbacks จากภายในแผงด้านนอกและแผงด้านในคือ
30 postbacks แบบอะซิงโครนัส PRM = Sys.WebForms.PageRequestManager
31
32 <br /><br />
33 <asp:Button ID="OPButton1" Text="ปุ่มแผงด้านนอก" runat="เซิร์ฟเวอร์" />
34 อัพเดตล่าสุดเมื่อ
35 <%= DateTime.Now.ToString() %>
36 <br /><br />
37
38 <asp:UpdatePanel ID="NestedPanel" UpdateMode="Conditional" runat="เซิร์ฟเวอร์">
39 <เทมเพลตเนื้อหา>
40 <asp:Button ID="NPButton1" Text = "ปุ่ม 1 แผงที่ซ้อนกัน" runat = "เซิร์ฟเวอร์" />
41 อัพเดตล่าสุดเมื่อ
42 <%= DateTime.Now.ToString() %>
43 <br />
44 </เนื้อหาเทมเพลต>
45 </asp:UpdatePanel>
46 </เนื้อหาเทมเพลต>
47 </asp:UpdatePanel>
48
49 <input type="button" onclick="Clear();" value="ล้าง" />
50
51 <asp:Button ID = "FullPostBack" runat = "เซิร์ฟเวอร์" Text = "Postback แบบเต็ม" />
52 <a href=" http://www.microsoft.com">ทดสอบการยกเลิก การโหลดหน้าต่าง</a>
53 <br />
54 <span id="ClientEvents"></span>
55 </div>
56 </แบบฟอร์ม>
57</ร่างกาย>
58</html>
59
รหัสสคริปต์:
1// เชื่อมต่อตัวจัดการเหตุการณ์ของแอปพลิเคชัน
แอป 2var = Sys.Application;
3app.add_load(โหลดแอปพลิเคชัน);
4app.add_init(ApplicationInit);
5app.add_disposing(ApplicationDisposing);
6app.add_unload(แอปพลิเคชันยกเลิกการโหลด);
7
8
9//ตัวจัดการเหตุการณ์แอปพลิเคชันสำหรับนักพัฒนาส่วนประกอบ
10ฟังก์ชั่น ApplicationInit (ผู้ส่ง) {
11 var prm = Sys.WebForms.PageRequestManager.getInstance();
12 ถ้า (!prm.get_isInAsyncPostBack())
13 {
14 prm.add_initializeRequest(เริ่มต้นคำขอ);
15 prm.add_beginRequest(เริ่มต้นคำขอ);
16 prm.add_pageLoading(การโหลดหน้า);
17 prm.add_pageLoaded(โหลดหน้า);
18 prm.add_endRequest(คำขอสิ้นสุด);
19}
20 $get('ClientEvents').innerHTML += "APP:: Application init. <br/>";
ยี่สิบเอ็ด}
22function ApplicationLoad (ผู้ส่ง args) {
23 $get('ClientEvents').innerHTML += "APP:: โหลดแอปพลิเคชัน";
24 $get('ClientEvents').innerHTML += "(isPartialLoad = " + args.get_isPartialLoad() + ")<br/>";
25}
26 ฟังก์ชั่น ApplicationUnload (ผู้ส่ง) {
27 alert('APP::Application unload.');
28}
29ฟังก์ชั่น ApplicationDisposing (ผู้ส่ง) {
30 $get('ClientEvents').innerHTML += "APP:: การกำจัดแอปพลิเคชัน <br/>";
31
32}
33//ตัวจัดการเหตุการณ์แอปพลิเคชันสำหรับนักพัฒนาเพจ
34ฟังก์ชั่นโหลดหน้า() {
35 $get('ClientEvents').innerHTML += "PAGE:: Load.<br/>";
36}
37
38ฟังก์ชั่น ยกเลิกการโหลดหน้า() {
39 alert('หน้า:: ยกเลิกการโหลดหน้า');
40}
41
42// ตัวจัดการเหตุการณ์ PageRequestManager
43 ฟังก์ชั่น InitializeRequest (ผู้ส่ง args) {
44 $get('ClientEvents').innerHTML += "<ชม/>";
45 $get('ClientEvents').innerHTML += "PRM:: กำลังเริ่มต้นคำขอ async.<br/>";
46}
47 ฟังก์ชั่น BeginRequest (ผู้ส่ง args) {
48 $get('ClientEvents').innerHTML += "PRM:: เริ่มต้นการประมวลผลคำขอแบบอะซิงโครนัส<br/>";
49}
50ฟังก์ชั่น PageLoading (ผู้ส่ง args) {
51 $get('ClientEvents').innerHTML += "PRM:: กำลังโหลดผลลัพธ์ของคำขอ async.<br/>";
52 คือ updatedPanels = printArray("PanelsUpdating", args.get_panelsUpdating());
53 var DeletePanels = printArray("PanelsDeleting", args.get_panelsDeleting());
54
55 ข้อความ var = "-->" + อัปเดตแผง + "<br/>-->" + ลบแผง + "<br/>";
56
57 document.getElementById("ClientEvents").innerHTML += ข้อความ;
58}
59function PageLoaded (ผู้ส่ง args) {
60 $get('ClientEvents').innerHTML += "PRM:: เสร็จสิ้นการโหลดผลลัพธ์ของคำขอ async.<br/>";
61 var updatedPanels = printArray("PanelsUpdated", args.get_panelsUpdated());
62 var createPanels = printArray("PaneslCreated", args.get_panelsCreated());
63
64 ข้อความ var = "-->" + อัปเดตแผง + "<br/>-->" + สร้างแผง + "<br/>";
65
66 document.getElementById("ClientEvents").innerHTML += ข้อความ;
67}
68function EndRequest (ผู้ส่ง, args) {
69 $get('ClientEvents').innerHTML += "PRM:: สิ้นสุดคำขอ async.<br/>";
70}
71
72// ฟังก์ชั่นตัวช่วย
73ฟังก์ชั่นเคลียร์()
74{
75 $get('กิจกรรมลูกค้า').innerHTML = "";
76}
77ฟังก์ชั่น printArray (ชื่อ, arr)
78{
79 แผง var = name + '=' + arr.length;
80 ถ้า (ความยาว arr. > 0)
81 {
82 แผง += "(";
83 สำหรับ (var i = 0; i < arr.length; i++)
84 {
85 แผง += arr[i].id + ',';
86}
87 พาเนล =พาเนล.ซับสตริง(0,พาเนลความยาว - 1);
88 แผง += ")";
89 }
90 แผงกลับ;
91}
92
ผลการรัน ดูโค้ด
ลำดับเหตุการณ์สำหรับสถานการณ์ทั่วไป [ลำดับเหตุการณ์ทั่วไป]
ลำดับของเหตุการณ์ที่ทริกเกอร์ยังคงขึ้นอยู่กับตัวควบคุมที่ใช้ในเพจและประเภทของคำขอที่เกิดขึ้น (คำขอการเริ่มต้น postback แบบเดิม หรือ postback แบบอะซิงโครนัส) ส่วนนี้อธิบายลำดับคำขอเหตุการณ์สำหรับสถานการณ์ทั่วไปหลายประการ
คำขอเริ่มต้น [คำขอการเริ่มต้น]
ในระหว่างคำขอเริ่มต้นเพจ เหตุการณ์ไคลเอ็นต์จำนวนเล็กน้อยจะถูกทริกเกอร์ สมมติว่าต่อไปนี้เป็นสถานการณ์สมมติของการร้องขอการเตรียมใช้งาน
· เพจนี้มีคอนโทรล ScriptManager และคุณสมบัติ SupportsPartialRendering และ EnablePartialRendering ของคอนโทรลเป็นจริงทั้งคู่
· คำขอเป็นประเภท GET
· เซิร์ฟเวอร์สามารถตอบสนองได้ตามปกติ
นี่คือลำดับเหตุการณ์ที่เกิดขึ้นในฝั่งไคลเอ็นต์:
1. การร้องขอการเริ่มต้นเกิดขึ้นกับเซิร์ฟเวอร์
2. ลูกค้าได้รับการตอบกลับ
3. อินสแตนซ์ของแอปพลิเคชันจะทริกเกอร์เหตุการณ์ init
4. อินสแตนซ์ของแอปพลิเคชันทริกเกอร์เหตุการณ์การโหลด
เหตุการณ์การเริ่มต้นจะเกิดขึ้นเพียงครั้งเดียวตลอดวงจรการใช้งานเพจทั้งหมดเมื่อมีการสร้างอินสแตนซ์ของแอปพลิเคชัน มันจะไม่ถูกยกขึ้นโดย postbacks แบบอะซิงโครนัสที่ตามมา ในระหว่างการร้องขอครั้งแรก (หมายเหตุคำขอ) ไม่มีเหตุการณ์ PageRequestManager เกิดขึ้น
Postback แบบอะซิงโครนัส [Asynchronous postback]
Postback แบบอะซิงโครนัสจะส่งข้อมูลเพจบางส่วนไปยังเซิร์ฟเวอร์ ได้รับการตอบกลับฝั่งเซิร์ฟเวอร์ จากนั้นรีเฟรชบางส่วนของเพจ สมมติว่าสถานการณ์สมมติ postback แบบอะซิงโครนัสต่อไปนี้:
· เพจมีตัวควบคุม ScriptManager และคุณสมบัติ SupportsPartialRendering และ EnablePartialRendering ของตัวควบคุมเป็นจริงทั้งคู่
· มีตัวควบคุม UpdatePanel บนเพจ และค่าของคุณสมบัติ ChildrenAsTriggers ของตัวควบคุมจะเปลี่ยนเป็นจริง
· มีปุ่มภายใน UpdatePanel สำหรับทริกเกอร์ postback แบบอะซิงโครนัส
· ได้รับการตอบกลับจากฝั่งเซิร์ฟเวอร์สำเร็จ
นี่คือลำดับเหตุการณ์ที่เกิดขึ้นในฝั่งไคลเอ็นต์:
1. เมื่อคลิกปุ่มในตัวควบคุม UpdatePanel จะเกิดการ postback แบบอะซิงโครนัส
2. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ InitializeRequest
3. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ beginningRequest
4. คำขอจะถูกส่งไปยังเซิร์ฟเวอร์
5. ลูกค้าได้รับการตอบกลับ
6. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ pageLoading
7. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ pageLoaded
8. อินสแตนซ์ของแอปพลิเคชันทริกเกอร์เหตุการณ์การโหลด
9. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ endRequest
โปรดทราบว่าเหตุการณ์การโหลดของแอปพลิเคชันอยู่หลังเหตุการณ์ pageLoaded ของ PageRequestManager และก่อนเหตุการณ์ endRequest
Postback แบบอะซิงโครนัสหลายรายการ [Postback แบบอะซิงโครนัสหลายรายการ]
เมื่อคำขอก่อนหน้าทำงานบนเซิร์ฟเวอร์หรือเบราว์เซอร์และผู้ใช้ส่งคำขอใหม่ จะเกิด Postback แบบอะซิงโครนัสหลายครั้ง สมมติว่าสถานการณ์ต่อไปนี้อธิบายกรณีของ postbacks แบบอะซิงโครนัสหลายรายการ
· เพจนี้มีคอนโทรล ScriptManager และคุณสมบัติ SupportsPartialRendering และ EnablePartialRendering ของคอนโทรลเป็นจริงทั้งคู่
· เพจนี้มีคอนโทรล UpdatePanel
· ใน UpdatePanel ปุ่มควบคุมที่ทำให้เกิด postback แบบอะซิงโครนัสจะถูกคลิกสองครั้ง การคลิกครั้งที่สองเกิดขึ้นในขณะที่เซิร์ฟเวอร์กำลังประมวลผลคำขอที่เริ่มต้นจากการคลิกครั้งแรก
· ได้รับการตอบสนองต่อคำขอแรกที่ส่งคืนจากเซิร์ฟเวอร์
นี่คือลำดับเหตุการณ์ที่เกิดขึ้นในฝั่งไคลเอ็นต์:
1. การคลิกปุ่มใน UpdatePanel จะทริกเกอร์ postback แบบอะซิงโครนัส
2. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ InitializeRequest
3. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ beginningRequest
4. คำขอจะถูกส่งไปยังเซิร์ฟเวอร์
5. ลูกค้าได้รับการตอบกลับ
6. มีการคลิกปุ่มอีกครั้ง เพื่อทริกเกอร์ postback แบบอะซิงโครนัสครั้งที่สอง
7. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ InitializeRequest สำหรับการคลิกครั้งที่สอง
8. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ beginningRequest สำหรับการคลิกครั้งที่สอง
9. คำขอคลิกครั้งที่สองของ Northern Expedition จะสแกนเซิร์ฟเวอร์
10. ลูกค้าได้รับการตอบกลับจากการคลิกครั้งที่สอง
11. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ pageLoading
12. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ pageLoaded
13. อินสแตนซ์ของแอปพลิเคชันทริกเกอร์เหตุการณ์โหลด
14. อินสแตนซ์ PageRequestManager ทริกเกอร์เหตุการณ์ endRequest
ลักษณะการทำงานของ Postback แบบอะซิงโครนัสเริ่มต้นคือ Postback แบบอะซิงโครนัสล่าสุดจะมีความสำคัญกว่า ถ้า postback แบบอะซิงโครนัสสองครั้งเกิดขึ้นตามลำดับ และ postback แบบอะซิงโครนัสแรกยังคงถูกประมวลผลโดยเบราว์เซอร์ Postback แบบอะซิงโครนัสแรกจะถูกยกเลิก หากมีการส่ง postback แรกไปยังเซิร์ฟเวอร์ เซิร์ฟเวอร์จะไม่ส่งคืนคำขอแรกจนกว่าคำขอที่สองจะมาถึง สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีกำหนดลำดับความสำคัญสำหรับ Postback แบบอะซิงโครนัส โปรดดูที่การให้ความสำคัญกับ Postback แบบอะซิงโครนัสเฉพาะ
การเรียกดูหน้าอื่น ๆ [การเรียกดูหน้าอื่น ๆ ]
เมื่อผู้ใช้เข้าถึงหน้าอื่นจากหน้าหนึ่ง หน้าปัจจุบันจะแสดงจาก เบราว์เซอร์ Unload เพื่อให้คุณสามารถดำเนินการเหตุการณ์ unload เพื่อเผยแพร่ทรัพยากรได้ สมมติว่าสถานการณ์นี้มีการจำลองด้านล่าง
· เพจนี้มีคอนโทรล ScriptManager และคุณสมบัติ SupportsPartialRendering และ EnablePartialRendering ของคอนโทรลเป็นจริงทั้งคู่
· มีหน้าเป้าหมายแล้ว
นี่คือลำดับเหตุการณ์ที่เกิดขึ้นในฝั่งไคลเอ็นต์:
1. เริ่มต้นคำขอสำหรับเพจใหม่
2. เบราว์เซอร์ได้รับการตอบกลับเพื่อขอหน้าใหม่
3. อินสแตนซ์ของแอปพลิเคชันจะทริกเกอร์เหตุการณ์การยกเลิกการโหลด
4. หน้าใหม่จะปรากฏขึ้น
หากเกิดข้อผิดพลาดขณะขอเพจใหม่ เหตุการณ์การยกเลิกการโหลดจะยังคงเกิดขึ้น แต่เพจใหม่จะไม่แสดง
【เกิน】