私はあなたのサンプル プロジェクトを見ました。あなたが経験している問題は非常に簡単に説明できますが、それを機能させるのはそれほど簡単ではないのではないかと心配しています。
まず、例外の原因を説明します。
ダイアログが読み込まれると、ページによって生成された出力にその内容が設定され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 を適切に実行することです。