This article demonstrates how to show the progress of a long running operation using simple label text. But you can add a spning progress indicator and make it much fancy.
Screenshots:
Markup:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="ActiveTest.Test" %> <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> <style type="text/css"> .Hide { display:none; } </style> </head> <body> <form id="form1" runat="server"> <div> <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> </asp:ToolkitScriptManager> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:Button runat="server" ID="btnDoTask" Text="Do Task" OnClick="Button1_Click" /> <asp:Label runat="server" ID="lblMessage" /> <asp:Button runat="server" ID="btnHidden" UseSubmitBehavior="false" CssClass="Hide" /> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>Code behind:
public partial class Test : Page { private string script = @"setTimeout(""__doPostBack('{0}','')"", 5000);"; public bool Processing { get { return (bool)(Session["Processing"] ?? false); } set { Session["Processing"] = value; } } public bool Completed { get { return (bool)(Session["Completed"] ?? (Session["Completed"] = true)); } set { Session["Completed"] = value; } } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.Processing) { this.lblMessage.Text = "Processing... Please wait..."; ScriptManager.RegisterStartupScript(this, this.GetType(), this.GetType().Name, string.Format(script, this.btnHidden.ClientID), true); } else { if (!this.Completed) { lblMessage.Text = "Processing is complete"; this.Completed = true; } else lblMessage.Text = string.Empty; } } protected void Button1_Click(object sender, EventArgs e) { Thread thread = new Thread(new ThreadStart(SomeLongOperation)); thread.Start(); this.lblMessage.Text = "Processing... Please wait..."; this.Processing = true; ScriptManager.RegisterStartupScript(this, this.GetType(), this.GetType().Name, string.Format(script, this.btnHidden.ClientID), true); } void SomeLongOperation() { this.Completed = false; for (int i = 0; i < 20; i++) Thread.Sleep(1000); this.Processing = false; } }
No comments:
Post a Comment