- - PR -
ASP.NET2.0での2重サブミット防止とローカルバリデーションの同時実装について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-27 22:24
いつも勉強させていただいております。
表題の件について実装方法がわからず、困っています。 目的は以下のとおりです。 (1)検索ボタンを押下直後に、javascriptにより検索ボタンをdisabledとする。 (2)上記(1)の後に、customValidator以外の 標準バリデータコントロールを使用して、 クライアントとサーバの両方で入力チェックを行う。 (3)上記(2)で入力エラーとなった場合、disabledをfalseに戻す。 つまづいているのは(3)で、クライアント側でエラーとなる場合です。 自動生成された、WebForm_DoPostBackWithOptions関数の中で、 バリデーションチェックが行われ、エラーがなければsubmitされているとの認識で、 エラーならば(3)を実行する自前の関数を追加実行したいのです。 しかし、この関数を追加する方法がどうしてもわかりません。 良い方法をご存知の方がいらっしゃいましたら、 ご教授のほどお願いいたします。 | ||||||||
|
投稿日時: 2007-09-28 01:37
ボタン押下直後ではなく、submit時にdisableにすればいいのではないでしょうか?
本来、ボタンの二度押しを防止する理由は、サーバーからのレスポンスが遅くてユーザーがもう一度ボタンを押せてしまうことを防ぐためだと思います。 検証コントロールのJavaScriptの実行時間は一瞬のはずですので、検証が終わってsubmitが行われる場合にのみdisableにすれば充分ではないかと思います。 _________________ C#と諸々 | ||||||||
|
投稿日時: 2007-09-28 07:10
Ajax Control ToolkitのConfirmBottonExtenderを利用したらどうでしょうか。
このコントロールのConfirmOnFormSubmitプロパティに「true」を設定すると 検証コントロールでエラーがないときのみメッセージを表示することができます。 このロジックを応用して、検証コントロールでエラーがないときのみ 検索ボタンをDisableにするとか。 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||||||
|
投稿日時: 2007-09-28 13:45
よこけんさん Accessさん
ご返答ありがとうございます。 お二人に提案していただいた方法を両方検討した結果、 検証コントロールのJavascriptの実行時間は十分に少ないことを 確認できましたので、 よこけんさんの方法で実装させて頂くことにしました。 ありがとうございました。 | ||||||||
|
投稿日時: 2007-09-28 21:43
クライアントが、Javascript を off にしていると、どうなるのでしょう? クライアントが、ブラウザ以外の UA を使うと、どうなるのでしょう? (オークションなどで、自動的に巡回するものがありますよね。ああいうもの) IE6 で、[ファイル → 新規作成 → ウインドウ]とすると、同じ画面を表示したウインドウがもう一枚開きますが、両方で[検索]ボタンを押したら、どうなるのでしょう? ([検索]ではなく、[登録]ボタンだったら?)
(キーボード リピート設定の初期値を、「速すぎる」と宣ったユーザがいた) (「手が震えるから、キーボードを数回押してしまう」と宣ったユーザがいた) | ||||||||
|
投稿日時: 2007-09-29 02:26
書き方が悪かったですね。私は、ユーザーが二重送信をしてしまった際の「ユーザー側の理由や動機」について特に触れたつもりはなく、単にタイミングというか「隙」について取り上げたつもりでした^^; _________________ C#と諸々 |
1