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>

相关文章推荐

K3客户端的配置及应用问题.

  • 2012年04月19日 09:11
  • 48KB
  • 下载

抛弃LCDS和FMS,在tomcat下开发Red5应用(第四篇)-客户端和服务器端的方法互相调用

客户端和服务器端的方法相互调用比较重要,在线列表基本上全是用这种方式实现的,当然也有使用RemoteSharedObject来实现的,但本人不太喜欢用RemoteSharedObject,只是用Rem...

MVC设计模式在客户端的应用.pdf

  • 2008年08月19日 20:00
  • 209KB
  • 下载

Ubuntu SSH 客户端的应用 | sshfs映射远程文件系统为本地磁盘

Ubuntu SSH 客户端的应用SSH是指Secure Shell,是一种安全的传输协议。Ubuntu客户端通过SSH访问远程服务器,以下步骤是客户端的配置方法:1. sudo apt-get in...

看一下Android开发内容、方向,如果是要从事应用程序客户端的开发,需要了解SSH

学完ssh后,是学jje还是android?   2012-4-27 13:38 提问者: 晨梦1314258620 | 悬赏分:5 | 浏览次数:114次 问题补充: jje是JSF,JPA,...

spring 3.0.5 release 对REST 客户端的应用例子

spring 3.0.5 release 对REST 客户端的应用例子
  • moliqin
  • moliqin
  • 2011年03月28日 13:57
  • 5459

微信小程序(应用号)开发新闻客户端的实战课程

本实例将演示从零开发一个微信应用号的过程,页面轮播与跳转传值,实现单元格自定义布局,全部源码可通过github下载。...
  • ishxiao
  • ishxiao
  • 2016年09月28日 10:38
  • 1568
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UpdatePanel客户端的应用
举报原因:
原因补充:

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