2011-01-25 4 views
3

ユーザーがフォームを送信しないようにするために、ボタンを無効にするためにASP.NETのボタンのonclickにJavaScriptを追加したばかりです2回)。ASP.NET - ボタンにonclick属性を追加すると、ページでポストバックのソースを特定できない

このボタンをクリックすると、ページは正常にポストバックされますが、コントロールイベントハンドラは実行されません。ASP.NETはページをポストしたコントロールを特定できません。

私はこの予期しない動作によってちょっと困ります。誰もがそれを説明し、これを行う代わりの方法を提案することができますか?

+0

これはASP.NET Buttonコントロールですか、HTMLボタンですか?それがASP.NET Buttonコントロールの場合、JavaScriptはOnClickまたはOnClientClickにありますか? – knight0323

+0

これはASP.NET Buttonサーバーコントロールです。私はonlick = "Foo();"を追加しました。コントロールを拡張することによって(すなわち、継承を介して)マークアップに直接アクセスすることができる。 – David

答えて

2

はこれを試してみてください。

<asp:Button ID="Button1" UseSubmitBehavior="false" 
    OnClientClick="javascript:document.getElementById('Button1').disabled = true; __doPostBack('__Page', '');" 
    onclick="Button1_Click" runat="server" Text="Button" /> 

それは必要な余分な要求検査を通ってくるでしょう。あなたはonclickのを追加する方法についてコメントした後

: ちょうどdoPostBack(「 _page」、 『YOURBUTTONNAME』)_追加して、サーバ側のイベント引数を検査します。

+0

私はこれを試してみますが、一見すると、なぜそれがDevelopingChrisが言及したHTMLの問題を回避するのか分かりません。無効にされたコントロールは何も投稿しません。 – David

+0

私はテストアプリを作成しましたが、それは魅力のように機能します:D – Eluvitar

+0

私は理解していないことに満足しています!私は明日、それをチェックします、ありがとう。 – David

3

ポストバックする前にボタンを無効にすると、サーバー側のイベントは登録されません。

これを処理する簡単な方法は、クリックした後にボタンを隠すか、2番目のクリックがフォームポストにカスケードされないようにするハンドラを作成することです。

前回私はonclientclickの.style.display = "none"を使ってこの問題を解決しました。 無効になっているのは、サーバーが尊重している単なるスタイルではありません。

<asp:Button ID="Button1" OnClientClick="javascript:this.style.display = 'none'" 
onclick="Button1_Click" runat="server" Text="Button" /> 
+0

。私は決してこれを考えなかったでしょうが、そうです、あなたはかなり正しいです。ありがとうございました! – David

+0

これは質問の最初の部分に対する正解です。つまり、なぜこの問題が起こっているのですか?私はEluvitarの答えを正しいものとしてマークしました。それは解決策を提供するからです。 – David

+1

Ajaxコンテナの中にそのボタンを配置すると、彼のソリューションはコンテナがクリックを捕らえて邪魔にならないようにします。今日は6または1/2ダース、システム全体でこれを塩と胡椒にすると大きな違いです。 – DevelopingChris

関連する問題