UpdateProgress控件

1.4  UpdateProgress控件

UpdateProgress控件可与UpdatePanel配合,用来显示目前异步Postback的处理状况,或是将进行中的异步Postback取消。

1.4.1  显示处理中信息

您可以在页面上布置了UpdatePanel后,再放入一个UpdateProgress控件,如图1-37所示。

图1-37

您也可以把UpdateProgress放在UpdatePanel之外,如果该UpdateProgress是放在任何UpdatePanel之外(如图1-37),请务必设置其AssociatedUpdatePanelID属性,将UpdatePanel与UpdateProgress相结合。(若UpdateProgress放在UpdatePanel之内,则不需要特别设置)。

完成之后,我们可以Double-Click读取数据,撰写下面的代码:

EX:PrimerAJAX/UpdateProgress/Demo01.aspx.vb

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs)

        '停顿5秒钟

        System.Threading.Thread.Sleep(5000)

        '刷新TextBox内的文字

        Me.TextBox1.Text = Now

    End Sub

接着,您可以试着执行此页面,由于我们通过Sleep(5000)代码让系统先停顿5秒钟,因此TextBox的内容不会立刻刷新(因为后端动作尚未完成),但是UpdateProgress中的内容“数据读取中…“却会显示出来,如图1-38所示。

图1-38

直到5秒钟过后,整个异步Postback完成,数据被刷新到TextBox中,并且UpdateProgress中的内容“数据读取中…“也随之消失,如图1-39所示。

图1-39

从上面这个范例中您可以发现,UpdateProgress可以在异步Postback过程当中,让客户端的页面上呈现出信息,避免异步Postback可能导致的长时间运算造成客户以为程序当掉的问题。

例如如图1-40所示的这个网页,是中国台湾知名的在线地图网站,您会发现在文字方块中点击搜索按钮之后,系统会开始搜索特定地点的地图,并呈现在页面上,在后端服务器运算(搜索)的过程中,系统也会在界面的右上角显示出“Loading”,告诉用户目前在运算当中,提醒用户不要关闭浏览器。

图1-40

 备注

这项功能在我们利用UpdatePanel进行异步Postback的时候相当好用,因为并非每个Server端的事件都能够在短时间内回应,有时候大量数据的读取或是运算,需要花掉数秒钟的时间。加上网际网络带宽的不确定性,因此在异步刷新数据时,确实需要告诉用户目前的状况,以避免客户误会程序没有运作而直接关闭浏览器。

1.4.2  允许用户中断

同样的,若后端服务器实在运算(搜索、或处理)太久,我们是否可以允许用户从前端中止这样的异步Postback呢?答案当然是可行的。

请参考如图1-41所示的网页。

图1-41

在页面的UpdateProgress当中,我们插入了一个STOP按钮,这个按钮只是一个单纯的HTML Button,接着我们撰写这样的JavaScript代码:

EX: PrimerAJAX/UpdateProgress/Demo02.aspx

                <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">

                    <ProgressTemplate>

                        数据读取中...

                        <input type="button" value="STOP" onclick="if (Sys.
WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) { Sys.
WebForms.PageRequestManager.getInstance().abortPostBack(); }" />

                    </ProgressTemplate>

                </asp:UpdateProgress>

请注意上方标识的部分,当点击该HTML按钮之后,会执行到下面的JavaScript程序:

if (Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack()) {

    Sys.WebForms.PageRequestManager.getInstance().abortPostBack();

 }

其中的“Sys.WebForms.PageRequestManager.getInstance()”是ASP.NET AJAX Client-Script Library提供的功能,可以获取目前网页上前端“PageRequestManager”对象,通过该对象,我们可以判断目前是否正在进行异步Postback(利用get_isInAsyncPostBack()方法),也可以中止它(利用abortPostBack())。

如此一来,当客户在等候异步Postback的过程当中,若不耐烦长时间的运行时,可以通过点击“STOP”按钮来停止此次的异步Postback动作,如图1-42所示。

这个功能让我们在异步的Postback机制当中,有着更佳的控制性。

你可能感兴趣的:(JavaScript,浏览器,asp.net,button,textbox,PostBack)