UpdatePanel客户端的应用

原创 2007年10月03日 22:43:00

PageRequestManager类

*  getInstance静态方法
     – 获得全局唯一的PageRequestManager实例
*  isInAsyncPostBack属性
     – 是否正处在一个异步更新过程中
*  abortPostBack方法
     – 取消当前的异步更新
     – 不会产生异常

UpdatePanel客户端生命周期

*  PageRequestManager的事件
      – 异步刷新时触发
      – initializeRequest
      – beginRequest
      – pageLoading
      – pageLoaded
      – endRequest

下面对这5个事件分别举例说明它们的应用:

 initializeRequest事件

*  常用操作:
    – 读取请求信息
    – 取消此次异步更新

//页面中有控件同时发起异步刷新 并且它们有优先级别之分
<script type="text/javascript" language="javascript">
    
var lastPostBackButtonId = null;//发起上一次异步请求的控件 这里是Button
    var btnPrecedenceId = "<%= this.btnPrecedence.ClientID %>";//优先级别高的异步请求Button
    //initializeRequest的参数为InitializeRequestEventArgs
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(
        
function(sender, e)
        
...{
            
var prm = Sys.WebForms.PageRequestManager.getInstance();//获取PRM的全局唯一实例
            if (prm.get_isInAsyncPostBack())//是否处于异步更新中
            ...{
                
if (lastPostBackButtonId == btnPrecedenceId)//如果上次请求的优先级别高
                ...{
                    e.set_cancel(
true);//取消当前的异步请求
                    
                    
if (e.get_postBackElement().id == btnPrecedenceId)//如果当前请求也是高优先级别
                    ...{
                        showMessage(
"不可重复发起优先的刷新。");
                    }

                    
else
                    
...{
                        showMessage(
"请等待优先的刷新结束。");
                    }

                    
                    
return;
                }

                
//如果上次是优先级别底的请求
                else if (e.get_postBackElement().id == btnPrecedenceId)//当前请求为优先级别高的
                ...{
                    showMessage(
"发起优先的刷新,普通的刷新将被取消。");
                }

                
else
                
...{
                    showMessage(
"重新发起普通的刷新,前一次提交将被取消。");
                }

            }

            
            lastPostBackButtonId 
= e.get_postBackElement().id;//保存当前请求的级别
        }
);
</script>

PRM – beginRequest事件

*  常用操作:
    – 读取请求信息
    – 改变请求方式(替换Executor)
    – 显示更新提示

如果引发异步更新的是UpdatePanel外部的控件则无法显示UpdateProgress提示。下面解决这问题:

//强制显示UpdateProgress
<script type="text/javascript" language="javascript">
    Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(
    
function (sender,e)
    
...{
        
if(e.get_postBackElement().id!="<%= this.Button2.ClientID  %>")//如果是UpadtePanel内部控件发起更新则返回
        ...{
            
return;
        }

        
        
var UpdateProgress=$get("<%= this.UpdateProgress1.ClientID %>");//如果是外部控件引发更新
        var dynamicLayout=<%= this.UpdateProgress1.DynamicLayout.ToString().ToLower() %>
        
        
if(dynamicLayout)//判断UpdateProgress是否正在显示
        ...{
            UpdateProgress.style.display
="block";//正在显示则维持状态
        }

        
else
        
...{
            UpdateProgress.style.visibility 
= "visible";//不在显示则强制它显示
        }

    }

    );
</script>

PRM – pageLoading事件

*  参数类型:PageLoadingEventArgs
    – dataItems属性:获得服务器端注册的数据项
    – panelsDeleting属性:获得即将删除的
        UpdatePanel
    – panelsUpdating属性:获得即将更新的
        UpdatePanel
*  常用操作
    – 提示更新的UpdatePanel
    –   (能够)获得服务器端注册的数据项
对于页面中存在多个UpdatePanel  正在更新的UpdatePanel给予特别提示:

//突出显示正在更新的UpdatePanel
<script language="javascript" type="text/javascript">
    
function LightPanels(panels,clear)//突出显示UpadtePanel
    ...{
        
for(var i=0; i<panels.length;i++)
        
...{
            
var pan=panels[i];
            pan.style.border
=clear ? "solid 0px white":"solid 2px red";
            pan.style.backgroundColor
=clear ? "white":"#d6dde8";
        }

    }

    Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(
    
function (sender,e)
    
...{
        
var updateingpanels=Array.clone(e.get_panelsUpdating());//找出页面正在更新的UpdatePanel集合
        LightPanels(updateingpanels);//突出显示正在更新的UpdatePanel
        
        window.setTimeout(
function()...{LightPanels(updateingpanels,true);},2000);//2秒后让突出显示的UpdatePanel恢复原来样式
        
    }
);
</script>

PRM – pageLoaded事件

应用 缺

PRM – endRequest事件

*  参数类型:EndRequestEventArgs
    – dataItems属性:获得服务器端注册的数据项
    – error属性:获得异步刷新时获得的错误
    – errorHandled属性:表明错误是否已被处理了
    – response属性:获得这次请求获得的结果对象
*  常用操作:
    – 处理异步刷新结果(异常、超时、取消, etc.)
    – 获得请求结果中额外的信息
    –   (能够)获得服务器端注册的数据项

应用:对于页面错误的处理:

<script language="javascript" type="text/javascript">
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(
        function (sender,e)
...{
            
if(e.get_error())//捕抓错误
            ...{
                e.set_errorHandled(
true);//错误不被抛出,自己处理
                if(e.get_response().get_timedOut())//是否为超时错误
                ...{
                    showMessage(
"刷新超时!");
                }

                
else if(e.get_response().get_statusCode()!=200)//是否为未知错误
                ...{
                    showMessage(
"发生未知错误!");
                }

                
else
                
...{
                    showMessage(e.get_error().message);
//直接输出错误信息
                }

                
             }

             
else if(e.get_response().get_aborted())//更新是否被取消
             ...{
                    showMessage(
"请求被取消!");
             }

             
else//提示你完成了对哪个控件的更新
             ...{
                var UIp
="<%= this.UpdatePanel1.ClientID %>";
                var item
=e.get_dataItems()[UIp];
                showMessage(
"你请求了"+item);
             }

        }
);
    
</script>

SMTP协议应用:使用Socket发送邮件

简单的邮件传输协议SMTP       很多应用需要发送邮件的功能。PHP有一个自带的mail()函数,很多新手会问“为什么使用这个函数发不了邮件?”这是因为想要使用SMTP协议发送邮件,必须首先安装...
  • c_manito
  • c_manito
  • 2017年12月24日 17:18
  • 94

WebService学习——使用CXF编写WebService客户端

昨天尝试用CXF编写了WebService的服务端,今天试着写了一个客户端来调用服务端。首先上网查了一下,发现有好几种写法,具体每一种方法可以参考这篇文章,我使用的是不需要wsdl2java工具直接进...
  • u011024652
  • u011024652
  • 2016年06月16日 16:41
  • 472

3次握手中的最后一个ACK服务端收到了吗

TCP三次握手考的应该是很多,也很重要,至于过程网上应该很多了,这里我说一下我的思考。              在TCP三次握手中的最后一次,服务端可能没有收到客户端发来的ACK吗?答案是有可能的...
  • ma2595162349
  • ma2595162349
  • 2017年07月15日 16:14
  • 474

使用极光推送做iOS客户端的推送

iOS推送实际是个很辛苦的过程,不过大部分工作苹果已经做过了,我们所要做的就是传设备号即Device Token之类的,现在记录下一些第一次做推送时候遇到的困惑 1:    极光推送可以有很多方式,...
  • June_email
  • June_email
  • 2015年09月08日 16:48
  • 1546

客户端技术分类

(分类一)根据客户端运行环境分类:1. 独立的运行程序 - C/S应用2. 运行于容器中2.1 运行于浏览器中 - B/S应用HTML - 典型的B/S系统,CGI、JSP、ASP、PHP、各种模板技...
  • rainz
  • rainz
  • 2005年05月30日 11:47
  • 1345

客户端的配置与应用

实验目的:1、了解SQLPLUS连接数据库的方法 2、掌握SQLPLUS设置环境变量的操作方法 3、掌握利用SQLPLUS格式化查询结果的方法 4、掌握常用的SQLPLUS命令 5、掌握在SQ...
  • codefight
  • codefight
  • 2017年03月05日 12:40
  • 158

应用系统客户端的打印

做Client的打印功能是很麻烦的,虽然Delphi可以做到模拟与实际打印一起实现,但是具体的打印定位都要在程序里写,或者利用打印组件(FastReport或Rave)。所以,我做的Client一般只...
  • sz_haitao
  • sz_haitao
  • 2008年12月01日 13:22
  • 623

服务器获得客户端时间的方法

服务器获得客户端时间的方法now是获得服务器的时间吗,并不一定,只有在服务器端运行的脚本是获得服务器的时间,在客户端的则是获得客户端的可以使用任何一个元素,比如span或者input记载服务器的时间,...
  • airweilai
  • airweilai
  • 2008年06月16日 09:49
  • 276

ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略

ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略 UpdatePanel局部刷新的使用 ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果...
  • chenhongwu666
  • chenhongwu666
  • 2014年11月22日 23:13
  • 50080

面向客户端的服务

  • wangfengfan1
  • wangfengfan1
  • 2015年09月01日 15:40
  • 197
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UpdatePanel客户端的应用
举报原因:
原因补充:

(最多只允许输入30个字)