AJAX ย่อมาจาก Asynchronous JavaScript และ XML นี่คือเทคโนโลยีข้ามแพลตฟอร์มที่ช่วยเร่งเวลาตอบสนอง ส่วนควบคุมเซิร์ฟเวอร์ AJAX จะเพิ่มสคริปต์ลงในเพจ ซึ่งดำเนินการและประมวลผลโดยเบราว์เซอร์
อย่างไรก็ตาม เช่นเดียวกับตัวควบคุมเซิร์ฟเวอร์ ASP.NET อื่นๆ ตัวควบคุมเซิร์ฟเวอร์ AJAX เหล่านี้สามารถมีวิธีและตัวจัดการเหตุการณ์ที่เกี่ยวข้องกัน ซึ่งทั้งหมดได้รับการจัดการบนฝั่งเซิร์ฟเวอร์
กล่องเครื่องมือควบคุมใน Visual Studio IDE ประกอบด้วยชุดของส่วนประกอบการควบคุมที่เรียกว่า 'AJAX'
การควบคุม ScriptManager เป็นการควบคุมที่สำคัญที่สุด และต้องปรากฏบนเพจเพื่อให้การควบคุมอื่นๆ ทำงาน
มันมีไวยากรณ์พื้นฐาน:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
หากคุณสร้าง 'ไซต์ที่เปิดใช้งาน Ajax' หรือเพิ่ม 'แบบฟอร์มเว็บ AJAX' จากกล่องโต้ตอบ 'เพิ่มรายการ' หน้าเว็บจะถูกสร้างขึ้นโดยอัตโนมัติและมีการควบคุมตัวจัดการสคริปต์ การควบคุม ScriptManager ดูแลการเขียนสคริปต์ฝั่งไคลเอ็นต์สำหรับการควบคุมฝั่งเซิร์ฟเวอร์ทั้งหมด
ตัวควบคุม UpdatePanel เป็นตัวควบคุมคอนเทนเนอร์และได้มาจากคลาสการควบคุม มันทำงานเป็นคอนเทนเนอร์สำหรับการควบคุมลูกภายในและไม่มีอินเทอร์เฟซของตัวเอง เมื่อตัวควบคุมตัวใดตัวหนึ่งทริกเกอร์การส่งกลับ UpdatePanel จะเข้ามาแทรกแซงเพื่อเริ่มแบบอะซิงโครนัสและอัปเดตส่วนหนึ่งของเพจ
ตัวอย่างเช่น หากปุ่มควบคุมอยู่ในแผงอัปเดตและมีการคลิก ปุ่มควบคุมในแผงอัปเดตเท่านั้นที่จะได้รับผลกระทบ และการควบคุมในส่วนอื่นๆ ของเพจจะไม่ได้รับผลกระทบ สิ่งนี้เรียกว่าการส่งคืนคอมมิตบางส่วนหรือการส่งคืนคอมมิตแบบอะซิงโครนัส
เพิ่มเว็บฟอร์ม AJAX ให้กับแอปพลิเคชันของคุณ มันมีการควบคุมตัวจัดการสคริปต์เริ่มต้น ใส่แผงอัพเดต วางปุ่มควบคุมและป้ายกำกับป้ายกำกับไว้ภายในแผงควบคุมการอัปเดต วางปุ่มและป้ายกำกับอีกชุดไว้ด้านนอกแผง
มุมมองการออกแบบมีลักษณะดังนี้:
ไฟล์ทรัพยากรมีลักษณะดังนี้:
<form id="form1" runat="server"> <div> <asp:ScriptManager ID="ScriptManager1" runat="server" /> </div> <asp:UpdatePanel ID="UpdatePanel1" runat="เซิร์ฟเวอร์" > <ContentTemplate> <asp:Button ID="btnpartial" runat="server" onclick="btnpartial_Click" Text="Partial PostBack"/> <br /> <br /> <asp:Label ID="lblpartial" runat="server"></asp:Label> </ContentTemplate> </asp:UpdatePanel> <p> </p> <p>นอกแผงการอัปเดต</p> < p> <asp:ปุ่ม ID="btntotal" runat="server" onclick="btntotal_Click" Text="Total PostBack" /> </p> <asp:Label ID="lbltotal" runat="เซิร์ฟเวอร์"></asp:ฉลาก></ฟอร์ม>
ปุ่มควบคุมทั้งหมดมีรหัสเดียวกันสำหรับตัวจัดการเวลา:
string time = DateTime.Now.ToLongTimeString();lblpartial.Text = "กำลังแสดงเวลาจากแผง" + เวลา;lbltotal.Text = "กำลังแสดงเวลาจากภายนอก" + เวลา;
สังเกตว่าเมื่อดำเนินการเพจ หากคลิกปุ่มส่งส่งคืนทั้งหมด ระบบจะอัปเดตแท็กทั้งหมดตามเวลาอัปเดต แต่หากคลิกปุ่มส่งส่งคืนบางส่วน ระบบจะอัปเดตเฉพาะแท็กในแผงอัปเดตเท่านั้น
คุณสมบัติ | อธิบาย |
---|---|
เด็กๆAsTriggers | คุณสมบัตินี้ระบุว่าการส่งคืนมาจากการควบคุมลูกหรือไม่ ซึ่งจะทำให้แผงการอัปเดตรีเฟรช |
เทมเพลตเนื้อหา | เป็นเทมเพลตเนื้อหาและกำหนดสิ่งที่จะปรากฏภายในแผงอัปเดตเมื่อปรากฏขึ้น |
คอนเทนเนอร์เทมเพลตเนื้อหา | ดึงวัตถุคอนเทนเนอร์เทมเพลตที่สร้างขึ้นแบบไดนามิก และใช้เพื่อเพิ่มการควบคุมลูกโดยทางโปรแกรม |
IsInPartialRendering | ระบุว่าแผงได้รับการอัปเดตเป็นส่วนหนึ่งของการส่งคืนการคอมมิตบางส่วนหรือไม่ |
โหมดเรนเดอร์ | แสดงโหมดการเรนเดอร์ โหมดที่ใช้ได้คือ Block และ Inline |
อัปเดตโหมด | รับหรือตั้งค่าโหมดการเรนเดอร์โดยการกำหนดเงื่อนไขบางประการ |
ทริกเกอร์ | กำหนดออบเจ็กต์ทริกเกอร์คอลเลกชัน ซึ่งแต่ละออบเจ็กต์จะสอดคล้องกับเหตุการณ์ที่ทริกเกอร์การอัปเดตอัตโนมัติของแผง |
ตารางต่อไปนี้แสดงวิธีการของแผงควบคุมการอัพเดต:
วิธี | อธิบาย |
---|---|
สร้างคอนเทนเนอร์เทมเพลตเนื้อหา | วัตถุควบคุมถูกสร้างขึ้นเพื่อใช้เป็นคอนเทนเนอร์สำหรับตัวควบคุมลูกที่กำหนดเนื้อหาของตัวควบคุม UpdatePanel |
CreateControlCollection | ส่งกลับชุดของการควบคุมทั้งหมดที่มีอยู่ในการควบคุม UpdatePanel |
เริ่มต้น | เตรียมใช้งานคอลเลกชันทริกเกอร์การควบคุม UpdatePanel ถ้าการวาดเพจบางส่วนกำลังทำงานอยู่ |
อัปเดต | ทำให้เนื้อหาของตัวควบคุม UpdatePanel ได้รับการปรับปรุง |
ลักษณะการทำงานของแผงการอัปเดตขึ้นอยู่กับค่าของคุณสมบัติ UpdateMode และคุณสมบัติ ChildrenAsTriggers
วิธี | อธิบาย | อิทธิพล |
---|---|---|
เสมอ | เท็จ | พารามิเตอร์ที่ผิดกฎหมาย |
เสมอ | จริง | UpdatePanel จะอัปเดตหากทั้งหน้าอัปเดตหรือมีการควบคุมลูกด้านบนกลับมา |
มีเงื่อนไข | เท็จ | UpdatePanel จะอัปเดตหากทั้งหน้าอัปเดตหรือหากการควบคุมที่ทริกเกอร์ภายนอกเริ่มการอัปเดต |
มีเงื่อนไข | จริง | UpdatePanel จะอัปเดตหากทั้งหน้าอัปเดตหรือส่วนควบคุมย่อยที่อยู่ด้านบนกลับมา หรือส่วนควบคุมที่ทริกเกอร์ภายนอกเริ่มการอัปเดต |
การควบคุม UpdateProgress ให้ข้อเสนอแนะจากเบราว์เซอร์เมื่อมีการอัปเดตการควบคุมแผงการอัปเดตตั้งแต่หนึ่งรายการขึ้นไป ตัวอย่างเช่น รอการตอบกลับจากเซิร์ฟเวอร์เมื่อผู้ใช้ล็อกอินหรือเมื่อทำงานบางอย่างเกี่ยวกับฐานข้อมูล
โดยจะให้การยืนยันด้วยภาพ เช่น "กำลังโหลดหน้า..." ว่างานกำลังถูกประมวลผล
ไวยากรณ์ของตัวควบคุม UpdateProgress คือ:
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DynamicLayout="true" AssociatedUpdatePanelID="UpdatePanel1" > <ProgressTemplate> กำลังโหลด... </ProgressTemplate></asp:UpdateProgress>
ตัวอย่างด้านบนแสดงข้อความธรรมดาพร้อมแท็ก ProgressTemplate อย่างไรก็ตาม อาจเป็นรูปภาพหรือการควบคุมอื่นๆ ที่เกี่ยวข้อง ตัวควบคุม UpdateProgress จะแสดงทุกการส่งคืนแบบอะซิงโครนัส เว้นแต่จะระบุเป็นแผงการอัปเดตแยกต่างหากโดยใช้คุณสมบัติ AssociatedUpdatePanelID
ตารางต่อไปนี้แสดงคุณสมบัติของการควบคุมความคืบหน้าการอัพเดต
คุณสมบัติ | อธิบาย |
---|---|
AssociatedUpdatePanelID | รับและตั้งค่า ID ของแผงการอัปเดตด้วยการควบคุมที่เชื่อมโยงกับการควบคุมนี้ |
คุณสมบัติ | รับและตั้งค่าคุณสมบัติ Cascading Style Sheet (CSS) ของตัวควบคุม UpdateProgress |
แสดงหลังจาก | รับและตั้งเวลาเป็นมิลลิวินาทีหลังจากแสดงเทมเพลตการประมวลผล ค่าเริ่มต้นคือ 500 |
ไดนามิกเลย์เอาต์ | ระบุว่าเทมเพลตกระบวนการถูกแสดงแบบไดนามิกหรือไม่ |
แม่แบบความคืบหน้า | บ่งชี้ว่าเทมเพลตถูกแสดงในระหว่างการส่งกลับแบบอะซิงโครนัสที่ใช้เวลานานกว่าเวลา DisplayAfter |
ตารางต่อไปนี้แสดงวิธีการควบคุมความคืบหน้าการอัพเดต:
วิธี | อธิบาย |
---|---|
GetScriptDescriptors | ส่งกลับรายการส่วนประกอบ ลักษณะการทำงาน และการควบคุมฝั่งไคลเอ็นต์ที่จำเป็นสำหรับฟังก์ชันฝั่งไคลเอ็นต์ของตัวควบคุม UpdateProgress |
GetScriptReferences | ส่งกลับรายการตัวควบคุม UpdateProgress ที่สคริปต์ไคลเอ็นต์ขึ้นอยู่กับ |
การควบคุมตัวจับเวลาใช้เพื่อเริ่มต้นการส่งกลับโดยอัตโนมัติ ซึ่งสามารถทำได้สองวิธี:
(1) ตั้งค่าคุณสมบัติทริกเกอร์ของตัวควบคุม UpdatePanel
<ทริกเกอร์> <asp:AsyncPostBackTrigger ControlID = "btnpanel2" EventName = "คลิก" /></ ทริกเกอร์ >
(2) วางการควบคุมตัวจับเวลาโดยตรงภายใน UpdatePanel เพื่อเป็นทริกเกอร์สำหรับการควบคุมย่อย ตัวจับเวลาเดียวสามารถทำหน้าที่เป็นตัวกระตุ้นสำหรับ UpdatePanels จำนวนมากได้
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always"> <ContentTemplate> <asp:Timer ID="Timer1" runat="server" Interval="1000"> </asp:Timer> < asp:Label ID="Label1" runat="server" Height="101px" > </asp:Label> </ContentTemplate></asp:UpdatePanel>