2012-04-25 16 views
-1

ボタンのClickイベントでは、ボタンを無効にしてイベントハンドラを呼び出すことはできますか?ボタンをクリックする:ボタンのハンドラを無効にして実行する

私はこれを試してみました:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Button1.Enabled = false; 
} 

これはIE、Mozillaの、またはChromeで動作しません。

+1

クライアント側でそれを行ってください**のみ**。 – gdoron

+0

質問を編集して、何が起こりたいのかを明確にしてください。ここに投稿したコードは、コードが返ってきたときにそのボタンを無効にし、そのメソッドで実行されている他のコードも無効にします。 –

+0

これはJavaScriptを使用して行います。これは、サーバーではなく、作業を実行しているクライアントをベースにしています(1000/10000/100000ユーザーが同じアクションを実行した場合はどうなりますか?) –

答えて

-1
<asp:Button ... OnClientClick="disableButton(this);" /> 

<script type="text/javascript"> 
function disableButton(button) 
{ 
//need to delay a few ms so that the button posts back before being disabled 
    var buttonToDisable = button; 
    setTimeout("reallyDisableButton()"), 2); 
} 

function reallyDisableButton() 
{ 
    buttonToDisable.disabled = true; 
} 
</script> 

私はあなたの問題は(ページそれがロードするがかかっているため)、人々が数回イベントをキックオフので、ボタンを数回クリックしていることであると仮定し、あなただけの彼らが行うことができるようにしたいですそれは一度。これにより、ポストバック後にボタンが無効になり、誤って複数の同時ポストバックが送信されることを防ぎます。

+0

...または最初にボタンを無効にしてから、 '__doPostBack( 'Button1'、 '');'を呼び出し、元の投稿を防ぐために 'e.preventDefault();'を続けることができます。 –

+0

@Scottこれはユーザーに遅延が見られるようなものではありません。それは彼らに瞬時に現れます。 – Servy

+0

私はそれを理解しています。物事が起こったときのコントロールが好きだと言っているだけです。ポストバックを発生させるデフォルトのメカニズムのために関数が完了できるようにするために遅延を残しておくことは、最も制御された解決策ではありません。私はポストバックを発生させるように自分自身を制御するほうがいいと感じています。再び、それは単なる制御優先事項です。 –

0

あなたは、これを追加してみてください:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    // Do some stuff here 

    Button1.Attributes.Add("onclick", "javascript:return false;"); 
    Button1.Enabled = false; 
} 
関連する問題