在本篇文章中,我们将通过编写JavaScript来使用客户端行为扩展UpdateProgress控件,客户端代码将使用ASP.NET AJAX Library中的PageRequestManager,在UpdateProgress控件中,将添加一个Button,来允许用户取消异步更新,并且使用客户端脚本来显示或者隐藏进度信息。
 
主要内容
1.通过客户端脚本取消异步更新
2.通过客户端脚本显示或者隐藏进度信息
 
一.通过客户端脚本取消异步更新
1.创建一个Web页面并切换到设计视图。
2.在工具箱中双击ScriptManagerUpdatePanelUpdateProgress控件添加到页面中。添加后页面如下:
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本3UpdatePanel控件中添加一个Label控件并设置它的Text属性值为“Panel Rendered”。
4.添加一个Button控件并设置它的Text属性值为“refresh”。
5.在UpdateProgress控件中添加文本text Processing…,并添加一个HtmlButton控件并设置它的Text属性为cancle
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_026.双击refresh控件添加Click事件。
7.在ButtondClick事件处理中添加如下代码,人为的创建一个3秒钟的延迟并显示当前服务器的时间。
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_03protected void Button1_Click(object sender, EventArgs e)
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_客户端_04
{
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07    System.Threading.Thread.Sleep(
3000);
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07    Label1.Text 
= DateTime.Now.ToString();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_10}
8.添加如下脚本,获取一个当前PageRequestManager类的实例,并创建一个函数调用abortPostBack方法来停止异步更新。
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.NETAJAX_11<script language="javascript" type="text/javascript">
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
<!-- 
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
var prm = Sys.WebForms.PageRequestManager.getInstance();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_17
function CancelAsyncPostBack() {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_21    
if (prm.get_isInAsyncPostBack()) {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07      prm.abortPostBack();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_27    }

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

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_10
// -->
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_03
</script>
9.设置HtmlButtonclick特性为CancelAsyncPostBackASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_31
10.添加如下的样式块到<head>元素之间。
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.NETAJAX_32<style type="text/css">
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_36#UpdatePanel1 
{
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07  width
:200px; height:100px;
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07  border
: 1px solid gray;
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_27
}

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_46#UpdateProgress1 
{
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07  width
:200px; background-color: #FFC080;
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07  bottom
: 0%; left: 0px; position: absolute;
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_27
}

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_10
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_03
</style>
11.保存并按Ctrl + F5运行。
12.单击refresh按钮,经过短暂的延时之后显示进度信息,完成异步更新之后UpdatePanel中的信息显示为当前的服务器时间。ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_57
13.单击refresh按钮并立即单击Cancle按钮结束异步更新,注意到UpdatePanel中的时间信息并没有更新。
二.通过客户端脚本显示或者隐藏进度信息
在下列情况下,UpdateProgress控件将不会自动显示:
    UpdateProgress控件关联的UpdatePanel之外的控件引发的异步更新。
    UpdateProgress控件没有关联任何UpdatePanel,不在UpdatePanel中的控件引发的异步更新(例如用代码实现的更新)。
下面的例子将展示一个不在UpdateProgress所关联的UpdatePanel中的控件所引发的异步更新时,如何显示UpdateProgress控件。
1.在我们前面所创建的页面中,切换到设计视图。
2.选中UpdateProgress控件,在属性窗口中,设置AssociatedUpdatePanelID属性为UpdatePanel1
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.NETAJAX_583.在UpdatePanelUpdateProgress控件之外添加一个Button控件。
4.设置ButtonText属性值为Trigger,并设置ID属性为Panel1Trigger
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_595.选择UpdatePanel控件,在属性窗口中Triggers属性行单击ellipsis (…)
6.创建一个异步更新触发器,并设置控件IDPanel1Trigger
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_607.双击Trigger按钮添加Click事件。
8.在ButtondClick事件处理中添加如下代码,人为的创建一个3秒钟的延迟并显示当前服务器的时间,并附加上一条信息表示是由触发器引发的异步更新。
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_03protected void Panel1Trigger_Click(object sender, EventArgs e)
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_62
{
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07    System.Threading.Thread.Sleep(
3000);
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07    Label1.Text 
= DateTime.Now.ToString() + " - trigger";
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_10}
9.在代码窗口,在已有的<Script>脚本块中添加如下代码:
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_69

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_70<script language="javascript" type="text/javascript">
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
<!-- 
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
var prm = Sys.WebForms.PageRequestManager.getInstance();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_客户端_78
function CancelAsyncPostBack() {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_客户端_82    
if (prm.get_isInAsyncPostBack()) {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07      prm.abortPostBack();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_27    }

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_27}

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07prm.add_initializeRequest(InitializeRequest);
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07prm.add_endRequest(EndRequest);
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
var postBackElement;
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.NETAJAX_98
function InitializeRequest(sender, args) {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_102    
if (prm.get_isInAsyncPostBack()) {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07        args.set_cancel(
true);
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_27    }

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07    postBackElement 
= args.get_postBackElement();
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_111    
if (postBackElement.id = 'Panel1Trigger') {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07        $get('UpdateProgress1').style.display 
= 'block';                
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_27    }

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_27}

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_客户端_121
function EndRequest(sender, args) {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.NETAJAX_125    
if (postBackElement.id = 'Panel1Trigger') {
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07        $get('UpdateProgress1').style.display 
= 'none';
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_27    }

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_UpdateProgress_27}

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_ASP.netAJAX入门系列_07
// -->
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_10

ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_03
</script>
10.保存并按Ctrl + F5运行。
11.单击Trigger按钮,如下所示:
ASP.NET AJAX入门系列(7):使用客户端脚本对UpdateProgress编程_脚本_138
[翻译自官方文档]