pageLoad()不使用.NET 4.0在动态加载的页面中触发(在3.5上正常工作)

我有一个简单的aspx页面,其中包含一个链接,用于在右侧div上加载另一个aspx页面(使用JQuery加载),如下所示:

      
function loadPage() { $('#myRightdiv').load('Test.aspx', function () {}); }

在我的Test.aspx中,我有一个像这样的pageLoad:

       
function pageLoad() { alert("pageloaded"); }

这在ASP .NET 3.5上运行良好….但是使用.NET 4.0不会触发pageLoad!

任何想法或解决方法?

谢谢

当Microsoft Ajax Library完成初始化Sys.Application对象时,将调用特殊的pageLoad函数。 不幸的是,这个初始化代码在ASP.NET 4.0中被大量重写(详情如下),现在,在符合标准的浏览器中,当jQuery load函数加载页面时, Sys.Application根本不会被初始化。 幸运的是,有一个简单的解决方法:自己初始化Sys.Application

 $('#myRightdiv').load('Test.aspx', function () { Sys.Application.initialize(); }); 

我在IE9(标准模式),Firefox和Chrome中测试了此修复程序。

为了让您的示例在IE9(Quirks模式)下工作,您还需要将pageLoad函数移动到

ASP.NET 3.5和ASP.NET 4.0之间的变化

在ASP.NET 3.5中, 控件在标记之前插入对Sys.Application.initialize()的调用。 当jQuery加载Test.aspx时,它会按顺序执行每个 ,因此在Sys.Application.initialize()调用它之前定义了pageLoad ,一切正常。

在ASP.NET 4.0中, 控件不再插入JavaScript。 代替:

  • 在支持document.addEventListener [例如IE9(标准模式),Firefox和Chrome]的浏览器中, Sys.Application构造函数添加了一个调用Sys.Application.initialize()DOMContentLoaded事件侦听器。 但是当浏览器加载当前页面(Default.aspx)时,已经引发了DOMContentLoaded 。 通过AJAX请求加载Test.aspx不会导致浏览器重新引发DOMContentLoaded

  • 在支持document.attachEvent但不支持document.attachEvent [如IE9(Quirks模式)]的浏览器中,如果浏览器已完成加载当前页面(它具有,那么Sys.Application构造函数)会调用Sys.Application.initialize()当前页面是Default.aspx)。 在这种情况下,您需要包含MicrosoftAjax.js 之前定义pageLoad函数; 一个好地方是

有时当你调用未完全加载的目标页面时,你将调用pageload方法,它将不会应用于它,因此你必须在页面完全加载后调用

所以你可以在Test.aspx页面中做一些简单的解决方案:

   

与3.5和4.0相关的另一个原因我认为4.0加载脚本管理器的处理时间更长。

您可能想尝试在pageLoad之前引发的Sys.Application.add_load(处理程序),有关详细信息,请查看此信息。

对于如文档中提到的pageLoad似乎没有任何改变。 如果您没有对部分回发执行任何操作,那么您也可以使用window.onload。

如果您只是检查响应是否已成功接收,则可以使用Jquery.load()的回调函数