2009-08-13 18 views
3

私が更新しているページの送信ボタンをダブルクリックしないようにしようとしています。問題は、サーバーサイドの検証が行われているため、ユーザーが移動する前に更新を行う必要があるかどうかを判断する必要があるということです。私は現在私のフォームのための私の送信イベントに次のコードを持っています。サーバー側の検証でダブルクリックを防止する

<asp:Button ID="SubmitPayment" runat="server" OnClientClick="this.disabled='true';" UseSubmitBehavior="false" OnClick="SubmitPayment_Click" Text="Submit" /> 

ここで問題が発生するのは、ページが検証に合格しない場所です。この例では、ボタンを有効にしようとしたすべてが失敗しました。送信ボタンを無効にして修正された情報を再送信することは難しいです。私はそれを再び有効にするために、検証の最後に次の両方の方法を試しました。

SubmitPayment.Enabled = true; 
SubmitPayment.Attributes.Add("disabled", "false); 

このコントロールを再度有効にするにはどうすればよいですか?これはVisual Studio 2005にあります。事前に感謝します。

-edit- 私が使用したアプローチは次のとおりです。私は無効にされた追加のデコイボタンを追加し、display cssプロパティをnoneに設定しました。その後、送信ボタンを隠し、OnClientClickイベントのデコイボタンを表示するjavascriptを使用しました。最後に、サーバーサイドメソッドの終了は、ボタンのCSSプロパティを更新して後で非表示にして表示します。

コードセグメントは以下のとおりです。おかげで再び助け

function PreventDoubleClick() 
    { 
     var sp = document.getElementById("SubmitPayment"); 
     var db = document.getElementById("DecoyButton"); 
     sp.style.display = "none"; 
     db.style.display = "inline"; 
    } 

<asp:Button ID="SubmitPayment" runat="server" OnClientClick="javascript:PreventDoubleClick();" UseSubmitBehavior="false" OnClick="SubmitPayment_Click" Text="Submit" /> 
<asp:Button ID="DecoyButton" Enabled="false" runat="server" style="display:none;" Text="Please Wait..."/> 

DecoyButton.Style.Add("display", "none"); 
SubmitPayment.Style.Add("display", "inline"); 
+0

SubmitPayment.Attributes.Add( "disabled"、 "true");またはSubmitPayment.Attributes.Remove( "disabled"、 "false");仕事をしない? あなたは好奇心の問題があります。すべてをダブルクリックするいたずらについて何をすべきか(確かに、それは彼らのせいではないが、デスクトップインターフェースの設計者の間違いである)。 – mcandre

答えて

1

のために私は以前にも同様の問題を抱えていると私が思いついた最善の解決策は、ボタンを隠し、待ってください(または確認)のメッセージに置き換えることでした。検証に失敗した場合は、再度ボタンを表示することができます。

+0

私の好きなアプローチだとは言えませんが、それは私が見つけた唯一のものです。提案していただきありがとうございます。 –

+0

私の記事で追加した解決策には、もう1つ問題があります。デコイボタンを複数回実行すると、ページ上に永続的に表示されます。どのようにこれを解決するための任意のアイデア? –

関連する問題