pageLoad()不使用.NET 4.0在动态加载的页面中触发(在3.5上正常工作)
我有一个简单的aspx页面,其中包含一个链接,用于在右侧div上加载另一个aspx页面(使用JQuery加载),如下所示:
在我的Test.aspx中,我有一个像这样的pageLoad:
这在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()的回调函数