我有一个简单的 aspx 页面,其中有一个链接可以在右侧 div 上加载另一个 aspx 页面(使用 JQuery 加载),如下所示:
<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<html>
<head>
<script type="text/javascript" src="Scripts/jquery-1.6.2.js"></script>
</head>
<body>
<form id="form1" runat="server">
<script type="text/javascript">
function loadPage() {
$('#myRightdiv').load('Test.aspx', function () {});
}
</script>
<asp:Button ID="Button1" runat="server" Text="Load ..." OnClientClick="loadPage(); return false;" />
<div id="myRightdiv"></div>
</form>
在我的 Test.aspx 中,我有一个像这样的 pageLoad:
<%@ Page Title="Test" Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="About" %>
<html>
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script type="text/javascript">
function pageLoad() {
alert("pageloaded");
}
</script>
</form>
</body>
</html>
这在 ASP .NET 3.5 上运行良好......但是使用 .NET 4.0 不会触发 pageLoad!
有什么想法或解决方法吗?
Thanks
特别的pageLoad
当 Microsoft Ajax 库完成初始化时调用该函数Sys.Application
目的。不幸的是,这个初始化代码在 ASP.NET 4.0 中被彻底重写(详细信息如下),现在,在符合标准的浏览器中,Sys.Application
当 jQuery 加载页面时根本不会初始化load
功能。幸运的是,有一个简单的解决方法:初始化Sys.Application
你自己:
$('#myRightdiv').load('Test.aspx', function () { Sys.Application.initialize(); });
我在 IE9(标准模式)、Firefox 和 Chrome 中测试了此修复。
要让您的示例在 IE9(Quirks 模式)下工作,您还需要移动您的pageLoad
函数上升到<head>
.
ASP.NET 3.5 和 ASP.NET 4.0 之间发生了什么变化
在 ASP.NET 3.5 中,<asp:ScriptManager>
控件插入一个调用Sys.Application.initialize()
就在之前</form>
标签。当 jQuery 加载 Test.aspx 时,它会执行每个<script>
按顺序,所以你的pageLoad
之前已定义Sys.Application.initialize()
调用它,一切正常。
在 ASP.NET 4.0 中,<asp:ScriptManager>
控件不再插入那段 JavaScript。反而:
在支持的浏览器中document.addEventListener
[例如 IE9(标准模式)、Firefox 和 Chrome],Sys.Application
构造函数添加了一个DOMContentLoaded
调用的事件监听器Sys.Application.initialize()
. But DOMContentLoaded
当浏览器完成加载时已经引发current页面(默认.aspx)。通过 AJAX 请求加载 Test.aspx 不会导致浏览器重新启动DOMContentLoaded
.
在支持的浏览器中document.attachEvent
但不是document.addEventListener
[如IE9(Quirks模式)],Sys.Application
构造函数调用Sys.Application.initialize()
如果浏览器已完成加载当前页面(它已经完成,因为当前页面是 Default.aspx)。在这种情况下,您需要定义您的pageLoad
功能before包含 MicrosoftAjax.js;一个好地方是<head>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)