检查页面是否使用 JavaScript 中的 asp.net ajax

Check if page uses asp.net ajax from JavaScript

本文关键字:中的 asp net ajax JavaScript 是否 检查      更新时间:2023-09-26

有没有办法从JavaScript确定页面是否包含脚本管理器,更新面板,或者__doPostBack是从更新面板调用还是部分回发?

当调用一个更新面板时,有两个函数从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"正确描述如何知道脚本管理器是否存在。

如果我理解正确,这里有两个问题:

(1) 如何在 JavaScript 中判断页面上是否存在脚本管理器?

如果服务器端页面包含脚本管理器,则客户端上将有一个可用的 PageRequestManager。 您可以通过以下方式发现它是否存在:

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

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

获得本地 PageRequestManager 的句柄后,可以挂接在每次回发之前触发的事件,并检查它是同步的还是异步的。 同样,PageRequestManager的文档将为您提供有关如何执行此操作的所有详细信息。

将 scriptManager clientID 发送到某个客户端 javascript,然后在页面上查找它(document.getElementById(emittedClientID)

您可以使用...__NewDoPostBack = __doPostBack重命名__doPostBack,然后创建一个新函数,例如...

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