Jquery pageLoad()在使用.NET 4.0动态加载的页面中不触发(在3.5上工作正常)
我有一个简单的aspx页面,其中有一个链接,可以在右div上加载另一个aspx页面(使用JQuery加载),如下所示:Jquery pageLoad()在使用.NET 4.0动态加载的页面中不触发(在3.5上工作正常),jquery,asp.net,Jquery,Asp.net,我有一个简单的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="S
<%@ 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>
<%@ 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>
函数loadPage(){
$('#myRightdiv').load('Test.aspx',function(){});
}
在我的Test.aspx中,我有这样一个页面负载:
<%@ 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>
<%@ 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>
函数pageLoad(){
警报(“页面加载”);
}
这在ASP.NET3.5上运行良好。。。。但是使用.NET4.0不会触发页面加载
有什么想法或解决办法吗
谢谢有时,当您调用未完全加载的目标页面时,您将调用pageload方法,该方法不会应用于该页面,因此您必须在页面完全加载后调用 因此,您可以在Test.aspx页面中执行以下简单解决方案:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script type="text/javascript">
function pageLoad() {
alert("pageloaded");
}
pageLoad(); //invoke pageLoad immediately
</script>
函数pageLoad(){
警报(“页面加载”);
}
页面加载()//立即调用pageLoad
另一个原因与3.5和4.0有关,我认为在4.0中加载scriptmanager需要更长的处理时间。您可能需要尝试Sys.Application.add_load(handler),它在页面加载之前引发,有关更多信息,请查看 文档中提到的pageLoad似乎没有任何变化。如果未对部分回发执行任何操作,则也可以使用window.onload
如果您只是检查是否已成功接收响应,则可以使用的回调函数。当Microsoft Ajax库完成初始化
系统应用程序
对象时,将调用特殊的页面加载
函数。不幸的是,此初始化代码在ASP.NET 4.0中被彻底重写(详情如下),现在,在符合标准的浏览器中,Sys.Application
在jQueryload
函数加载页面时根本无法初始化。幸运的是,有一个简单的解决方法:自己初始化Sys.Application
$('#myRightdiv').load('Test.aspx', function () { Sys.Application.initialize(); });
我在IE9(标准模式)、Firefox和Chrome中测试了这个补丁
要使示例在IE9(怪癖模式)下工作,还需要将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
构造函数添加了一个DOMContentLoaded
事件监听器,该监听器调用Sys.Application.initialize()
。但是当浏览器完成加载当前页面(Default.aspx)时,DOMContentLoaded
已被提升。通过AJAX请求加载Test.aspx不会导致浏览器重新引发DOMContentLoaded
- 在支持
document.attachEvent
但不支持document.addEventListener
[例如IE9(怪癖模式)]的浏览器中,Sys.Application
构造函数调用Sys.Application.initialize()
,如果浏览器已经加载完当前页面(因为当前页面是默认的.aspx),则调用Sys.Application.initialize()。在这种情况下,在包含MicrosoftAjax.js之前,您需要定义pageLoad
函数;一个好地方是
生成的HTML源代码(而不是ASP.net源代码)会更有用(因为这是一个JavaScript问题)。哪个pageLoad
不会被触发?主页上的那一个还是Test.aspx中的那一个?从我在Test.aspx的源代码中可以看到,没有任何东西触发pageLoad
功能。例如,一种方法可能是
,或者是ASP.net的等效方法,但您似乎没有定义这样的属性。比较3.5和4.0中的源代码,检查3.5中是否存在“onload”属性。我不需要定义它。。。正如我所说,这是一个.NET快捷方式,可以与.NET3.5配合使用。。。NET 4.0中发生了一些变化…发布Test.aspx生成的HTML源代码。(只需在单独的浏览器选项卡中加载Test.aspx,右键单击它,然后选择“查看源代码”)。通过检查生成的源代码,我们将能够判断是否正确调用了pageLoad
函数。谢谢,但是如果我手动调用它,我将失去pageLoad的含义,并且无法解决我的问题(我需要一个仅在pageLoad上可用的telerik组件)Sys.Application.add\u load也不起作用。。。你可以很容易地复制你想要的问题……你是对的,它不适用于.net 4.0,但适用于.net 3.5,它可以毫无问题地工作。然而,对于.NET4.0,如果我将IE浏览器模式从IE9更改为IE8,并且如果我继续,它将显示消息“怪诞棒极了!”!所以catch是调用initalize()并将pageLoad函数移动到,这样它就可以在IE9标准模式和怪癖模式下工作。工作起来很有魅力!今天学到了一些新东西