- PR -

ASP.NET2.0での2重サブミット防止とローカルバリデーションの同時実装について

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/09/27
投稿数: 3
投稿日時: 2007-09-27 22:24
いつも勉強させていただいております。
表題の件について実装方法がわからず、困っています。

目的は以下のとおりです。
(1)検索ボタンを押下直後に、javascriptにより検索ボタンをdisabledとする。
(2)上記(1)の後に、customValidator以外の
   標準バリデータコントロールを使用して、
   クライアントとサーバの両方で入力チェックを行う。
(3)上記(2)で入力エラーとなった場合、disabledをfalseに戻す。

つまづいているのは(3)で、クライアント側でエラーとなる場合です。
自動生成された、WebForm_DoPostBackWithOptions関数の中で、
バリデーションチェックが行われ、エラーがなければsubmitされているとの認識で、
エラーならば(3)を実行する自前の関数を追加実行したいのです。
しかし、この関数を追加する方法がどうしてもわかりません。

良い方法をご存知の方がいらっしゃいましたら、
ご教授のほどお願いいたします。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2007-09-28 01:37
ボタン押下直後ではなく、submit時にdisableにすればいいのではないでしょうか?
本来、ボタンの二度押しを防止する理由は、サーバーからのレスポンスが遅くてユーザーがもう一度ボタンを押せてしまうことを防ぐためだと思います。
検証コントロールのJavaScriptの実行時間は一瞬のはずですので、検証が終わってsubmitが行われる場合にのみdisableにすれば充分ではないかと思います。
_________________
C#と諸々
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-09-28 07:10
Ajax Control ToolkitのConfirmBottonExtenderを利用したらどうでしょうか。

このコントロールのConfirmOnFormSubmitプロパティに「true」を設定すると
検証コントロールでエラーがないときのみメッセージを表示することができます。

このロジックを応用して、検証コントロールでエラーがないときのみ
検索ボタンをDisableにするとか。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
未記入
会議室デビュー日: 2007/09/27
投稿数: 3
投稿日時: 2007-09-28 13:45
よこけんさん Accessさん

ご返答ありがとうございます。
お二人に提案していただいた方法を両方検討した結果、
検証コントロールのJavascriptの実行時間は十分に少ないことを
確認できましたので、
よこけんさんの方法で実装させて頂くことにしました。

ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-09-28 21:43
引用:

(1)検索ボタンを押下直後に、javascriptにより検索ボタンをdisabledとする。


クライアントが、Javascript を off にしていると、どうなるのでしょう?

クライアントが、ブラウザ以外の UA を使うと、どうなるのでしょう?
(オークションなどで、自動的に巡回するものがありますよね。ああいうもの)

IE6 で、[ファイル → 新規作成 → ウインドウ]とすると、同じ画面を表示したウインドウがもう一枚開きますが、両方で[検索]ボタンを押したら、どうなるのでしょう?
([検索]ではなく、[登録]ボタンだったら?)


引用:

本来、ボタンの二度押しを防止する理由は、サーバーからのレスポンスが遅くてユーザーがもう一度ボタンを押せてしまうことを防ぐためだと思います。


(キーボード リピート設定の初期値を、「速すぎる」と宣ったユーザがいた)
(「手が震えるから、キーボードを数回押してしまう」と宣ったユーザがいた)
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2007-09-29 02:26
引用:
Jittaさんの書き込み (2007-09-28 21:43) より:

(キーボード リピート設定の初期値を、「速すぎる」と宣ったユーザがいた)
(「手が震えるから、キーボードを数回押してしまう」と宣ったユーザがいた)



書き方が悪かったですね。私は、ユーザーが二重送信をしてしまった際の「ユーザー側の理由や動機」について特に触れたつもりはなく、単にタイミングというか「隙」について取り上げたつもりでした^^;

_________________
C#と諸々
1

スキルアップ/キャリアアップ(JOB@IT)