【ASP.NET】ASP.NETで、二重登録・二度押しの制御を考える

■ 方針

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