TOC

This article is currently in the process of being translated into Thai (~97% done).

Controls:

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 วินาที


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!