■ 方針
JavaScriptで制御する。 * 制御対象のコントロールが押下された時に 「document.readyState='complete'」になっていない場合は、 通信中と判断し、通信処理を行わないように「Submitでfalseを返す」 (ボタンをdisable指定でもいいが活性化に戻すタイミングが大変そうだし、alert表示はうっとおしいので) * ボタン押下後は、そのボタンのみ制御するだけではダメ。他のボタンやリンクなども制御の対象とする。
サーバでの制御
* 必要
■ イメージ
クライアント サーバ | | |→→→→→→→→→→|リクエスト | | |←←←←←←←←←←|レスポンス | | |→→→→→→→→→→|処理開始 |この間は、 | |2度押し防止中 | | | | | |←←←←←←←←←←|レスポンス(イベントハンドラ終了)
■ JavaScriptでの制御
対策方法[1] OnClientClickプロパティにJSを組み込む
* ボタン系コントロールのOnClientClickプロパティに、以下のようにJavaScriptコードを設定する。サンプル
<asp:Button ・・・略・・・ OnClientClick="if(window.document.readyState != null && window.document.readyState != 'complete'){return false;}else{return true;}" />参考資料
http://dotnet.kiyochan.jp/info/tech/aspdotnet.htm
対策方法[2] PageRequestManagerクラスを利用する
* 以下の参考資料を参考にする。(試してないけど)参考資料
http://www.atmarkit.co.jp/fdotnet/ajaxlib/ajaxlib02/ajaxlib02_02.html
関連記事
Enterキー長押しの制御を考える
https://blogs.yahoo.co.jp/dk521123/28165086.htmlキーイベント・ハンドル ~JavaScriptでキーを制御する~
https://blogs.yahoo.co.jp/dk521123/28230461.html参考資料
JavaScriptで制御
http://www.squabu.com/CodeSamples/Samples/etc/DoublePost.aspxhttp://d.hatena.ne.jp/itaosan/20061225/1167025092
http://japan.internet.com/column/developer/20070116/27.html
http://blogs.wankuma.com/mrt/archive/2007/11/23/109921.aspx
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11989&forum=7
http://vsug.jp/tabid/249/Default.aspx