質問
ASP.NET 1.1 アプリケーションがあり、別の値 (親子関係) を埋めるために使用される ComboBox を変更すると、2 つのポストバックが生成される理由を調べようとしています。
コードを何度も確認しましたが、原因が見つかりません。
ここでは、page_load で終わる両方の呼び出しスタックを示します。
最初のポストバック (ComboBox の自動ポストバックによって生成される)
ポストバック コール スタック http://www.juanformoso.com.ar/images/callstack1.jpg
2 番目のポストバック (これが原因を調べたいものです)
代替テキスト http://www.juanformoso.com.ar/images/callstack2.jpg
なにか提案を?何を確認できますか?
解決
これはこのコードの非常に特殊な問題なので、他の人にとって役立つとは思えませんが、次のようになります。
コンボにチェックが追加されました onchange
if を使用すると、条件が満たされた場合、ポストバック関数への明示的な呼び出しが行われます。コンボが設定されていた場合 AutoPostback
, 、asp.net はポストバック呼び出しを再度追加し、2 つのポストバックを生成しました...
生成されたhtmlはこんな感じでした。
[select onchange="javascript: if (CustomFunction()){__doPostBack('name','')}; __doPostBack('name','')"]
他のヒント
まず最初に探すのは、2 番目の ComboBox の AutoPostBack プロパティが true に設定されていないことです。そのプロパティを true に設定して 2 番目のコンボの値を変更すると、そのコントロールでポストバックが生成されると思います。
共有できるコードはありますか?当時、クラシック ASP ではダブル ポスト バックに非常に悩まされていたため、最終的に .NET にきっぱり切り替えるきっかけとなりました。.NET でこのような問題が発生したときは、ロード、初期化、事前レンダリング、クリック、SelectedIndexChanged などのすべての CONTROL 要素とすべての PAGE 要素にアクセスして、ブレークポイントを設定します。
そこにコードがない場合でも、次のようなものを挿入します。
Dim i As Integer
i = 0
通常、予期していなかったアクションを特定し、必要に応じて修正することができます。ここでそれを行うことをお勧めします。
幸運を。
Request.Form["__EVENTTARGET"] をチェックして、ポストバックを開始するコントロールを見つけます。これは、コントロールを絞り込むのに役立つ場合があります。
コールスタックといくつかのリフレクタリング (ASP.NET 2 へ - 1.1 は手元にありません) を見ると、SessionStateModule.PollLockedSessionCallback が HttpApplication スタートアップ ルーチンの一部であるようです。アプリがリサイクルされている可能性があります。そのためのイベントがイベント ログに書き込まれていると確信しています。
私の唯一の提案は、クライアント上で HTTP トラフィックをキャプチャするための Fiddler か何かです。
これは非常に古い投稿ですが、先週私が行ったのとまったく同じように、解決策を求めて人々がまだこれを探しています。
Grengby 氏が述べたように、二重イベントが主な理由ですが、それらの 1 つを削除することが常に選択肢になるわけではありません。少なくとも私の場合は、サードパーティのアプリケーションでこれを解決する必要がありました。
次のスクリプトを追加し、マスターページの ASP フォームを修正しました。
<script>var Q = 0;</script>
<form id="Form1" runat="server" onsubmit="Q++; if(Q==1){return true;} else { return false;}">
これは機能しているようですので、コメントを転送してください。
アルン
http://www.velocityreviews.com/forums/t117900-asp-net-multiple-postback-issue.html