在本篇文章中,我们将通过编写JavaScript来使用客户端行为扩展UpdateProgress控件,客户端代码将使用ASP.NET AJAX Library中的PageRequestManager,在UpdateProgress控件中,将添加一个Button,来允许用户取消异步更新,并且使用客户端脚本来显示或者隐藏进度信息。


主要内容

1​ ​.通过客户端脚本取消异步更新

2​ ​.通过客户端脚本显示或者隐藏进度信息


一.通过客户端脚本取消异步更新

1​ ​.创建一个Web页面并切换到设计视图。

2​ ​.在工具箱中双击ScriptManager、UpdatePanel、UpdateProgress控件添加到页面中。添加后页面如下:

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本

3​ ​.在UpdatePanel控件中添加一个Label控件并设置它的Text属性值为“Panel Rendered”。

4​ ​.添加一个Button控件并设置它的Text属性值为“refresh”。

5​ ​.在UpdateProgress控件中添加文本text Processing…,并添加一个HtmlButton控件并设置它的Text属性为cancle。

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_02

6​ ​.双击refresh控件添加Click事件。

7​ ​.在Buttond的Click事件处理中添加如下代码,人为的创建一个3秒钟的延迟并显示当前服务器的时间。​ ​.添加如下脚本,获取一个当前PageRequestManager类的实例,并创建一个函数调用abortPostBack方法来停止异步更新。​ ​.设置HtmlButton的click特性为CancelAsyncPostBack。

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_03 ​protected​  ​void​ ​ Button1_Click(​ ​object​ ​ sender, EventArgs e)
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_04
​ ​{
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_05    System.Threading.Thread.Sleep(3000);
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_06
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_07    Label1.Text = DateTime.Now.ToString();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_08}

8

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_09 ​<​ ​script ​ ​language​ ​="javascript"​ ​ type​ ​="text/javascript"​ ​>ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_10<!-- 
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_11var prm = Sys.WebForms.PageRequestManager.getInstance();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_12
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_13function CancelAsyncPostBack() {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_14
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_15    if (prm.get_isInAsyncPostBack()) {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_16
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_17      prm.abortPostBack();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_18
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_19    }
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_20}
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_21// -->
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_22
​ ​</​ ​script​ ​>

9

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_23

10​ ​.添加如下的样式块到<head>元素之间。​ ​.保存并按Ctrl + F5运行。

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_24 ​<​ ​style ​ ​type​ ​="text/css"​ ​>ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_25
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_26#UpdatePanel1 {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_27
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_28  width:200px; height:100px;
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_29
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_30  border: 1px solid gray;
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_31
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_32}
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_33
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_34#UpdateProgress1 {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_35
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_36  width:200px; background-color: #FFC080;
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_37
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_38  bottom: 0%; left: 0px; position: absolute;
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_39
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_40}
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_41
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_42
​ ​</​ ​style​ ​>

11

12​ ​.单击refresh按钮,经过短暂的延时之后显示进度信息,完成异步更新之后UpdatePanel中的信息显示为当前的服务器时间。

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_43

13​ ​.单击refresh按钮并立即单击Cancle按钮结束异步更新,注意到UpdatePanel中的时间信息并没有更新。

二.通过客户端脚本显示或者隐藏进度信息

在下列情况下,UpdateProgress控件将不会自动显示:

    由UpdateProgress控件关联的UpdatePanel之外的控件引发的异步更新。

    UpdateProgress​ ​控件没有关联任何UpdatePanel,不在UpdatePanel中的控件引发的异步更新(例如用代码实现的更新)。

下面的例子将展示一个不在UpdateProgress所关联的UpdatePanel中的控件所引发的异步更新时,如何显示UpdateProgress控件。

1​ ​.在我们前面所创建的页面中,切换到设计视图。

2​ ​.选中UpdateProgress控件,在属性窗口中,设置AssociatedUpdatePanelID属性为UpdatePanel1。

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_44

3​ ​.在UpdatePanel和UpdateProgress控件之外添加一个Button控件。

4​ ​.设置Button的Text属性值为Trigger,并设置ID属性为Panel1Trigger。

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_45

5​ ​.选择UpdatePanel控件,在属性窗口中Triggers属性行单击ellipsis (…)。

6​ ​.创建一个异步更新触发器,并设置控件ID为Panel1Trigger。

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_46

7​ ​.双击Trigger按钮添加Click事件。

8​ ​.在Buttond的Click事件处理中添加如下代码,人为的创建一个3秒钟的延迟并显示当前服务器的时间,并附加上一条信息表示是由触发器引发的异步更新。​ ​.在代码窗口,在已有的<Script>脚本块中添加如下代码:

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_47 ​protected​  ​void​ ​ Panel1Trigger_Click(​ ​object​ ​ sender, EventArgs e)
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_48
​ ​{
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_49    System.Threading.Thread.Sleep(3000);
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_50
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_51    Label1.Text = DateTime.Now.ToString() +
​ ​" - trigger";
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_52}

9

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_53

.保存并按Ctrl + F5运行。

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_54 ​<​ ​script ​ ​language​ ​="javascript"​ ​ type​ ​="text/javascript"​ ​>ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_55
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_56<!-- 
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_57
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_58var prm = Sys.WebForms.PageRequestManager.getInstance();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_59
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_60function CancelAsyncPostBack() {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_61
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_62    if (prm.get_isInAsyncPostBack()) {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_63
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_64      prm.abortPostBack();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_65
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_66    }
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_67
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_68}
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_69
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_70prm.add_initializeRequest(InitializeRequest);
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_71
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_72prm.add_endRequest(EndRequest);
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_73
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_74var postBackElement;
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_75
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_76function InitializeRequest(sender, args) {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_77
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_78    if (prm.get_isInAsyncPostBack()) {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_79
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_80        args.set_cancel(true);
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_81    }
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_82
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_83    postBackElement = args.get_postBackElement();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_84
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_85    if (postBackElement.id = 'Panel1Trigger') {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_86
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_87        $get('UpdateProgress1').style.display = 'block';                
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_88
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_89    }
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_90
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_91}
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_92
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_93function EndRequest(sender, args) {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_编程_94
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_95    if (postBackElement.id = 'Panel1Trigger') {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_96
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_97        $get('UpdateProgress1').style.display = 'none';
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_98
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_99    }
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_100
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_button_101}
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_102
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_103// -->
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ajax_104
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_asp.net_105
​ ​</​ ​script​ ​>

10

11​ ​.单击Trigger按钮,如下所示:

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_106
[翻译自官方文档]

作者: TerryLee