用于检测特定更新面板的异步回发的开始和结束的Javascript

时间:2010-08-24 20:52:13

标签: javascript asp.net panel

<script type="text/javascript">

       var prm = Sys.WebForms.PageRequestManager.getInstance();

       prm.add_endRequest(endRequest);
       prm.add_initializeRequest(initializeRequest);
       var _postBackElement;

       function initializeRequest(sender, e) 
       {
           if (prm.get_isInAsyncPostBack()) 
           {
               e.set_cancel(true);
           }

           _postBackElement = e.get_postBackElement();

           document.getElementById('loadingm').style.visibility = 'visible';
       }

     function endRequest(sender, e) 
           {
               $find('PopCustom_').show();
               document.getElementById('loadingm').style.visibility = 'hidden';  
           }
    </script> 

此代码适用于每个AsyncPostback,但我希望它能够在特定于Update-Panel的情况下运行。 不太熟悉JS,我不知道我在哪里做修改。

非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

目前为止的最佳解决方案是:

var cmdAuthoriseButton ='<%= cmdAuthorise.ClientID %>'; 

function beginReq(sender, args){ 

   if (cmdAuthoriseButton == args._postBackElement.id)

   {

       // shows the Popup 

       $find(ModalProgress).show();        

   }

} 

答案 1 :(得分:0)

触发启动非常简单,因为必须触发它,以便始终可以将代码添加到触发刷新的任何内容中。

要触发正在刷新的UpdatePanel的完成并不是那么简单,但框架提供了一些javascript功能来帮助解决这个问题。以下javascript代码将触发UpdatePanel刷新完成:

var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.pageLoaded(YourJavascriptFunctionNameHere); 
//or
prm.add_pageLoaded(YourJavascriptFunctionNameHere);

然后实现您注册的功能:

function YourJavascriptFunctionNameHere(sender, args)
{
    // do something
}

如果您需要,可以使用相同的方法来处理UpdatePanel刷新的开始以及使用

var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.beginRequest(YourJavascriptFunctionNameHere);
// or
prm.add_beginRequest(YourJavascriptFunctionNameHere);

我认为您可以找出导致senderargs参数更新的元素,但您需要在MSDN上阅读有关此函数的更多信息。

编辑:(来自MSDN文章,一个确定哪个UpdatePanel正在刷新的示例)

function beginRequest(sender, args) {
    postbackElement = args.get_postBackElement();
}
function pageLoaded(sender, args) {
    var updatedPanels = args.get_panelsUpdated();
    if (typeof(postbackElement) === "undefined") {
        return;
    } 
    else if (postbackElement.id.toLowerCase().indexOf('external') > -1) {
        for (i=0; i < updatedPanels.length; i++) {            
            panelUpdatedAnimation.animatePanel(updatedPanels[i]);
        }
    }
}