簡體   English   中英

檢查頁面是否使用來自javascript的asp.net ajax

[英]Check if page uses asp.net ajax from javascript

有沒有辦法從javascript確定頁面是否包含scriptmanager,updatepanel或者是否從更新面板調用了__doPostBack或者是partialpostback?

當調用一個更新面板時,有兩個函數從javascript端觸發。 在此功能中,您還可以獲取觸發此更新的面板的ID。 如果在更新面板之外有完整的帖子,則需要捕獲表單的提交。

以下是更新面板要更新時觸發的代碼,以及顯示觸發器的更新面板ID的函數。

<script>

    if(window.Sys && Sys.WebForms && Sys.WebForms.PageRequestManager)
    {
      var prm = Sys.WebForms.PageRequestManager.getInstance();

       prm.add_initializeRequest(InitializeRequest);
       prm.add_endRequest(EndRequest);
    }
    else
    {
      // no ScriptManager found
    }        

      function InitializeRequest(sender, args) 
      {     
         // get the array of update panels id
         var UpdPanelsIds = args.get_updatePanelsToUpdate();
         // get the Post ID
         args.get_postBackElement().id;
      }

      function EndRequest(sender, args) {
      }
</script>

'Dan Davies Brackett'正確描述了如何知道ScriptManager是否存在。

如果我理解正確,這里有兩個問題:

(1)如何在JavaScript中告訴頁面上是否存在ScriptManager?

如果服務器端頁面包含ScriptManager,則客戶端上將有一個PageRequestManager可用。 你可以發現它是否存在:

 var haveScriptManager = window.Sys && Sys.WebForms && Sys.WebForms.PageRequestManager;

(2)如何判斷__doPostBack是否同步?

一旦有了本地PageRequestManager的句柄,就可以掛鈎在每次回發之前觸發的事件,並檢查它是同步還是異步。 同樣, PageRequestManager文檔將為您提供有關如何執行此操作的所有詳細信息。

將scriptManager clientID發送到某個clientside javascript,然后在頁面上查找它(document.getElementById(emitClientID)

你可以用__NewDoPostBack = __doPostBack重命名__doPostBack,然后創建一個新的函數,如...

__doPostBack = function(whatever arguments __NewDoPostBack takes){
    alert("We're doing a post back");
    __NewDoPostBack(whatever arguments __NewDoPostBack takes)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM