4

次のように、(JQueryロードを使用して)右側のdivに別のaspxページをロードするためのリンクを含む単純な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>

私の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.NET3.5では正常に機能します....しかし、.NET 4.0を使用すると、pageLoadは起動されません。

アイデアや回避策はありますか?

ありがとう

4

3 に答える 3

7

特殊pageLoad関数は、MicrosoftAjaxライブラリがSys.Applicationオブジェクトの初期化を終了したときに呼び出されます。残念ながら、この初期化コードはASP.NET 4.0で大幅に書き直され(詳細は以下を参照)、標準に準拠したブラウザーでは、jQuery関数Sys.Applicationによってページが読み込まれたときにまったく初期化されません。load幸い、簡単な回避策がありSys.Applicationます。自分で初期化する:

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

この修正プログラムをIE9(標準モード)、Firefox、およびChromeでテストしました。

pageLoad例をIE9(クァークズモード)で機能させるには、関数を上に移動する必要もあります<head>

ASP.NET3.5とASP.NET4.0の間で何が変わったか

ASP.NET 3.5では、コントロールはタグの直前に<asp:ScriptManager>呼び出しを挿入します。jQueryがTest.aspxをロードすると、それぞれが順番に実行されるため、 jQueryを呼び出す前に定義され、すべてが機能します。Sys.Application.initialize()</form><script>pageLoadSys.Application.initialize()

ASP.NET 4.0では、<asp:ScriptManager>コントロールはJavaScriptのそのビットを挿入しなくなりました。その代わり:

  • document.addEventListener[IE9(標準モード)、Firefox、Chromeなど]をサポートするブラウザーでは、コンストラクターはを呼び出すイベントリスナーをSys.Application追加します。しかし、ブラウザが現在のページ(Default.aspx)のロードを終了したときに、すでに発生しています。AJAXリクエストを介してTest.aspxをロードしても、ブラウザは再起動しません。DOMContentLoadedSys.Application.initialize()DOMContentLoadedDOMContentLoaded

  • [IE9(Quirksモード)など]をサポートしているがサポートしてdocument.attachEventいないブラウザーでは、ブラウザーが現在のページ(現在のページはDefault.aspxであるため、現在のページの読み込みが完了している)の読み込みが完了すると、コンストラクターが呼び出します。この場合、MicrosoftAjax.jsを含める前に関数を定義する必要があります。良い場所はです。document.addEventListenerSys.ApplicationSys.Application.initialize()pageLoad<head>

于 2012-07-29T20:32:59.647 に答える
0

完全にロードされていないターゲットページを呼び出す場合は、pageloadメソッドを呼び出すと適用されないため、ページが完全にロードされた後に呼び出す必要があります。

したがって、Test.aspxページで以下のような簡単な解決策を実行できます。

<asp:ScriptManager ID="ScriptManager1" runat="server" />
  <script type="text/javascript">
    function pageLoad() {          
       alert("pageloaded");
    }        

    pageLoad(); //invoke pageLoad immediately
  </script> 

3.5と4.0に関連する他の理由は、scriptmanagerをロードするための4.0の処理時間が長くなると思います。

于 2012-07-23T20:01:40.573 に答える
0

代わりに、pageLoadの前に発生するSys.Application.add_load(handler)を試してみることをお勧めします。詳細については、これを確認してください。

ドキュメントでここに記載されているように、pageLoadについては何も変更されていないようです。部分的なポストバックで操作を実行していない場合は、window.onloadも使用できます。

応答が正常に受信されたかどうかを確認するだけの場合は、Jquery.load()のコールバック関数を使用できます。

于 2012-07-25T10:36:07.527 に答える