0

以下のコードを使用してjQueryモデルを使用して、aspxページをポップウィンドウにロードすると。

function OpenExceptions() {
$('#Equipmentdialog').load('Popups/Test1.aspx', function () {
   $(this).dialog({
        modal: true,
        width: 900,
        height: 400
    });
});

}

Test1.Aspx メソッドでサーバー側メソッド (C# ボタン クリック) を呼び出すことができません。サーバー側イベントを呼び出すと、リソースが見つからないという例外が発生しますか?

誰かが私に理由を説明してもらえますか?

ありがとう

更新:これは私が得ているエラーです

ここに画像の説明を入力

4

1 に答える 1

0

私はあなたのサンプル プロジェクトを見ました。あなたが経験している問題は非常に簡単に説明できますが、それを機能させるのはそれほど簡単ではないのではないかと心配しています。

まず、例外の原因を説明します。

ダイアログが読み込まれると、ページによって生成された出力にその内容が設定されTest.aspxます。ページに移動すると、この HTML が生成されるため、次のようになります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form name="form1" method="post" action="Test.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTI2NTY4ODI3MWRkmRTYlsUe3rVbAI2jDoNeA5EPuo8=" />
</div>

<div>

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgKd2MeEBAKM54rGBl+Fr2fdw6uP6072WYTIw/gz9N5E" />
</div>
    <div>
        <span id="Label1">Label</span>
        <br />
        <br />
        <input type="submit" name="Button1" value="Button" id="Button1" />

    </div>
    </form>
</body>
</html>

ダイアログには、アクションが に設定されたフォームが表示されTest.aspxます。したがって、Buttonダイアログの をクリックすると、フォームを にポスト バックしようとしTest.aspxますが、このページは 内にあるため見つかりませんPopups/Test.aspx。ここで、「修正」するために (実際には何も修正しないため、これを引用符で囲みます)、ダイアログの HTML を力ずくで変更できます。このようなことをしています:

function OpenExceptions() {
            $('#Equipmentdialog').load('Popups/Test.aspx #form1', function (response, status, xhr) {
                response = response.replace('action="Test.aspx"', 'action="Popups/Test.aspx"'); //Make sure the form's action is accurate
                $(this).html(response);
                $(this).dialog({
                    modal: true,
                    width: 900,
                    height: 400
                });
            });
        }

これで、 をクリックしても ;Buttonが表示されなくなりましたResource Not Found Exception。ただし、これにより通常のポストバックが発生するため、ダイアログが消え、ボタンがページをポストバックし、ページ上のラベルに現在の日付と時刻が表示されます。

繰り返しますが、これはすべて、Ajax リクエストではなく通常のポストバックを行っているために発生します。上記の私のアプローチButtonは、Test.aspxページ内の が Ajax リクエストを実行する場合に機能しますが、更新パネルとスクリプト マネージャーを使用するときに得られるようなものではありません。これらのツールは内部で動作するため、使用できません...

アプリで Ajax を使用する場合は、JQuery と組み合わせて WCF Web サービスを検討することをお勧めします。このトピックに関する多くの優れたチュートリアルがオンラインにあります。

私の答えが、これがうまくいかない理由と、このアプローチを使い続けた場合にうまくいかない理由を理解するのに少なくとも役立つことを願っています. それを機能させるために適用できるハックはたくさんありますが、維持と拡張が容易になるハックは 1 つも思いつきません。最善の方法は、WCF Web サービス (ま​​たはページ メソッド) と JQuery を使用して Ajax を適切に実行することです。

于 2012-08-13T02:48:36.877 に答える