2011-06-22 17 views
0

は、私はこのような解決策が見つかりましたが、私のonclickイベントは、すでにコードビハインドハンドラに関連付けられています:即時送信ボタンのクリックを防止しますか?

MyButton.Attributes.Add("onclick", "this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(MyButton, "").ToString()); 

onclick="this.disabled=true;__doPostBack('MyContrl$MyButton','');" 

私のコード:コードビハインド

<asp:imagebutton id="CheckoutBtn" runat="server" ImageURL="Styles/Images/submit.gif" onclick="CheckoutBtn_Click"> 

protected void CheckoutBtn_Click(object sender, ImageClickEventArgs e) 
     { 
      { 

       MyShoppingCart usersShoppingCart = new MyShoppingCart(); 
       if (usersShoppingCart.SubmitOrder(User.Identity.Name) == true) 
       { 
        CheckOutHeader.InnerText = "Thank you."; 
        Message.Visible = false; 
        CheckoutBtn.Visible = false; 
       } 
       else 
       { 
        CheckOutHeader.InnerText = "Submission Failed - Please try again. "; 
       } 
      } 

     } 
+0

あなたの質問は何ですか? – JeremyWeir

+0

こんにちは、ユーザーがタイトルに示されているように複数回送信ボタンをクリックしないようにする必要があります。 – k80sg

答えて

0

以前のクリック数のうち、特定のTimeSpanに含まれるクリックをスキップしたいと思っています。最初にDateTime.MinValueに設定されたクラス変数 "DataTime LastClickTime"を作成します。クリックハンドラを入力するときは、DateTime.Now - LastClickTime> TimeSpan(... desired ...)かどうかをチェックし、そうでなければクリックハンドラを終了してリターンします。

0

JavaScriptを無効にする代わりに、JavaScriptを無効にするようにしてください。

<asp:imagebutton id="CheckoutBtn" runat="server" ImageURL="Styles/Images/submit.gif" onclick="CheckoutBtn_Click" OnClientClick="this.disabled=true;"> 
+0

こんにちは、ありがとうございますが、私はCheckoutBtn_Clickイベントが最初の試行でもボタンを無効にするため動作しないと思います。 – k80sg

+0

Hmm?表示されているようにjavascriptを使用してボタンを無効にすると、次のようになります。1)ユーザーブラウザでボタンが無効になります。2)ポストバックが発生し、CheckoutBtn_Clickが発生します。3)そのイベントの実行中に、ボタンをクリックすることはできません。 4)イベントが終了したら、ボタンを再度有効にするか、ユーザーをリダイレクトすることができます。 –

+0

ありがとう、私はちょうどそれを試みたが、私のCheckoutBtn_Clickを発射するのではなく、コードの背後にあるPage_loadを発射する。 – k80sg

1

ボタンサーバーサイドが機能しません無効、ボタンがポストバックAFTER無効になり、この時点では、ユーザはまだ数回クリックすることができ、JavaScriptのthis.disabled=true;でそれを無効にすることに成功し、これを行うための唯一の方法です。

+0

そして、サーバーが応答しないと、ユーザーは壊れたページで終わります。 – CodesInChaos

0

1つの方法は、JavaScriptをJavaScriptから隠し、いくつかのajaxローダー画像を表示することです。

function btnClientClick() 
{ 
    document.getElementById('CheckoutBtn').style.display = 'none'; 
    document.getElementById('dvLoader').style.display = ''; 
} 
1

ユーザーがフォームを複数回送信しないようにしようとしているケースは、Post/Redirect/Getパターンを使用して処理するのが最適です。

それは非常に単純なパターンで、ウィキペディアはそれを説明するのは良い仕事をしていません: http://en.wikipedia.org/wiki/Post/Redirect/Get

関連する問題