2008-09-08 18 views
7

私は、ASP.NETボタンを継承し、 'onserverclick'を使用するコントロールをいくつか持っています。ボタンを偶発的にダブルクリックするのを防ぐ

ユーザーが2回クリックすると、ボタンは2つのサーバーサイドイベントを発生させます。どうすればこれを防ぐことができますか?

「this.disabled = 'true'」をクリックした後(javascriptを介して 'onclick'属性内にある)、最初のポストバックもブロックします。

答えて

13

ポストバックの制御を無効にする方法については、この例を参照してください。それはあなたが達成しようとしていることをするのに役立つはずです。代わりに隠れるの

http://encosia.com/2007/04/17/disable-a-button-control-during-postback/

+0

ありがとうございました...そのテクニックに必要な手動ポストバック参照がありませんでした – juan

+0

残念ながら、UseSubmitBehaviorをfalseに変更すると、フォームがJavaScriptなしでユーザーをサポートしなくなります。 – NightOwl888

+0

サイトがダウンしているようだが、Chromeにはサイトにマルウェアが含まれていると報告されている – SimplyInk

1

他の誰かがここ数日前にこう言っていましたが、私は同意します。ボタンを無効にするのではなく、ボタンを非表示にします。その場所に「スピナー」イメージを表示することができ、ユーザーは何が起こっているかを知ることができます。

+1

私はボタンが消えるという考えが納得できるとは思えません。別の(無効にされたボタン)が代わっていない限り。それはエンドユーザーに混乱するかもしれません...いいえ? –

+0

私はロブに同意します、私はボタンが消えているのを好きではありません – juan

+0

+1スピナーのアイデア - 何かが起こっていることをユーザーに示します。彼が絶対に主張するならば、私はまだ彼に再び提出する可能性/「コントロール」を残すだろう。 – giraff

1

は、私がやったことはJavaScriptを使用してスワップのボタンです。最初のボタンをクリックすると、別のグレー表示された画像が表示されます。

2

ポストバック時にボタンを無効にする必要はありません。あなたは、誤って2回提出しないようにしたいと思っています。したがって、サーバ側のアクションの結果としてボタンを無効または非表示にすることは、すでにゲームでは遅すぎます。この時点までに、第2の要求は既にそれに沿っている。あなたはjavascriptで行うか、サーバー側のコードが2回実行されないようにする必要があります。

<script type="text/javascript"> 
    // Using that prm reference, hook _initializeRequest 
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(InitializeRequestBuchung); 

    // Abfangen von Mehrfachklicks auf Buttons für asynchrone Postbacks im Updatepanel 
    function InitializeRequestBuchung(sender, args) { 
     var arrButtonIds = ["ButtonInsert", "ButtonUpdate"]; 

     // Get a reference to the PageRequestManager. 
     var prm = Sys.WebForms.PageRequestManager.getInstance(); 
     if (prm.get_isInAsyncPostBack() & jQuery.inArray(args.get_postBackElement().id, arrButtonIds) > -1) { 
      args.set_cancel(true); 
     } 
    } 
</script> 

現在非同期ポストバックがまだアクティブである場合、これは、次のポストバックをキャンセル:のUpdatePanelの場合、私は、次のアプローチを使用FormViewコントロールテンプレート内のボタンで

2

。完璧に動作します。

1

ButtonプロパティUseSubmitBehaviorをfalseに設定します。次に、ボタンを無効にするOnClientClick関数を作成します。 それはこのようになります:

<script type="text/javascript"> 
    function disableFunctn(button){ 
     button.disabled = true; 
    } 
</script> 
<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="disableFunctn(this);"/> 

最速の最も安い方法:

<asp:Button ID="button1" UseSubmitBehavior="false" OnClientClick="this.disabled=true;"/> 
0

あなたはまた、例えばbtnSave.Enableを試すことができます= falseは、ボタンがヒットし、ボタンの処理がClickイベントルーチンで行われる前に実行されます。それを有効にするためにリセットする必要がある場合は、再利用のためにボタンをリセットする独立したボタンがあります。

もう1つの方法は、ユーザーが保存するかどうかを尋ねられるように確認ボタンを設定し、両方の時間にポップアップする方法です。

もう1つの方法は、最初のオカレンスにフラグを立て、2回目以降の使用を確認するために2回目のポップアップを設定することです。

関連する問題