This article is currently in the process of being translated into Thai (~97% done).
UpdateProgress control
อีกหนึ่งปัญหาของ AJAX เมื่อส่วนของ AJAX ทำงาน จะไม่มีการแสดงสถานะใดๆ ให้ผู้ใช้งานทราบ ทั้งนี้ หากการประมวลผลกับเซิร์ฟเวอร์เป็นปกติ อันนั้นไม่ใช่ปัญหา แต่ถ้าเซิร์ฟเวอร์ทำงานได้ช้าลงหรือผิดปกติเมื่อไหร่ จะเป็นผลกระทบต่อผู้ใช้งานจำนวนมากเลยล่ะ
แต่ยังดีที่ ASP.NET AJAX ได้แก้ปัญหาในส่วนนี้ออกมาได้ดีเลยทีเดียว ซึ่งได้มีเครื่องมือเรียกว่า UpdateProgress. ซึ่งจะใช้เทมเพลตของคุณเอ.ในการระบุสถานะการทำงาน ในส่วนนี้ให้คุณนำคำสั่งด้านล่างไปใช้ และจะอธิบายการทำงานในลำดับถัดไป
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>UpdateProgress control</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdateProgress runat="server" id="PageUpdateProgress">
<ProgressTemplate>
Loading...
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel runat="server" id="Panel">
<ContentTemplate>
<asp:Button runat="server" id="UpdateButton" onclick="UpdateButton_Click" text="Update" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
CodeBehind ที่ต้องระบุ
protected void UpdateButton_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
}
ตัวอย่างนี้เป็นตัวอย่างง่ายๆ ให้เห็นการทำงานของ UpdateProgress control เมื่อคุณคลิกปุ่ม โปรเซสจะหยุดการทำงานชั่วคราวไป 5 วินาที (อย่างนำโค้ดนี้ไปใช้กับงานจริงๆ - ใช้สำหรับสาธิตตัวอย่างเท่านั้น) และข้อความ "Loading..." แสดงผลขึ้นมา คุณสามารถปรับแต่งเงื่อนไขเพิ่มเติมได้ใน ProgressTemplate เช่นทำ Animate ขณะโหลด เป็นต้น
คุณสามารถเพิ่ม UpdateProgress controls ลงบนเพจได้มากกว่า 1 ตัวได้ และสามารถใช้ AssociatedUpdatePanelID ได้ แต่ต้องตรวจสอบให้ดีว่า UpdateProgress จะแสดงก็ต่อเมื่อ UpdatePanel ทำงาน
DynamicLayout จะทำหน้าที่สำรองข้อมูลบนเว็บเพจเพื่อระบุความคืบหน้า หากเป็นจริง ช่องที่เว้นวรรคไว้เป็นไดนามิก ดังนั้นจึงไม่ได้เว้นไว้ แต่จะดำเนินการเมื่อมีการแสดงการควบคุม หากมีการจองพื้นที่ไว้ค่าจะเป็นเท็จ หากต้องการเทียบความแตกให้ใส่คำสั่งด้านล่างลงไปและกดย้อนกลับไปมาเพื่อเทียบความแตกต่างได้
หากบาง postbacks ทำงานเร็ว UpdateProgress จะแสดงระยะเวลาการทำงานได้สั้น ซึ่งทำให้หน้าเว็บกระพริบอย่างรวดเร็ว ทำให้ผู้ใช้งานเกิดความสับสน ด้วยเหตุผลดังกล่าวคุณอาจระบุจำนวนเวลาน้อยที่สุดที่จะเกิดขึ้นก่อนที่จะแสดงการควบคุมความคืบหน้า ซึ่งก็คือ DisplayAfter attribute โดยมีหน่วยเป็นมิลลิวินาที เช่น หากแสดงเป็น 2000 นั่นแสดงว่าใช้เวลาโหลด 2 วินาที