2010-08-24 138 views
2
<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上工作,但我希望它能夠更新面板特定。 不太熟悉JS,我不知道我在哪裏做修改。JavaScript檢測特定更新面板的AsyncPostback的開始和結束

幫助將不勝感激。

回答

1

最好的解決方案迄今:

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

function beginReq(sender, args){ 

    if (cmdAuthoriseButton == args._postBackElement.id) 

    { 

     // shows the Popup 

     $find(ModalProgress).show();   

    } 

} 
+0

是的。這也是我解決類似事情的方式。 – awe 2010-09-03 07:54:20

0

要觸發啓動很容易,因爲必須觸發它才能始終將代碼添加到觸發刷新的任何位置。

觸發完成UpdatePanel被刷新並不是那麼直截了當,但框架提供了一些JavaScript功能來幫助完成此操作。下面的JavaScript代碼也會觸發一個UpdatePanel刷新完成的:如果你願意,你可以用同樣的方法來工作過的啓動

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

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

然後實現你註冊的功能UpdatePanel刷新爲使用

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

好,我認爲你可以弄清楚什麼元素是從sender導致刷新或args params,但您需要在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]); 
     } 
    } 
} 
+0

其實我的問題是,我想使用我在上面更新面板中輸入的代碼。 (它目前觸發每個AsyncPostback) 我想我寧可修改「var prm = Sys.WebForms.PageRequestManager.getInstance();」 – dll32 2010-08-24 21:56:20

+0

@ dll32你的處理程序內我認爲你可以識別哪個項目導致刷新,所以你可以測試,以確定是否運行代碼。 MSDN鏈接顯示了更多關於計算出來的信息。 – Kelsey 2010-08-24 22:27:26

+0

沒想到會那麼複雜。 從UpdatePanel ID開始有沒有不同的解決方案? – dll32 2010-08-24 23:08:19

相關問題