2009-05-06 4 views
2

単純なイントラネットフォーラムの削除ボタンを作成する必要があります。投稿を削除する際に確認を求めるjavascriptアラートボックス(または同等のもの)を持っていたいと思います。しかし、コードビハインドに入るためにJavaScriptの確認ボックスの結果を得るのは難しいと感じました。これも可能ですか?あるいは別の種類のデザインを使用する必要がありますか?ASP.NETコードで作業するJavascript

答えて

6

ユーザーが

編集をキャンセル打つ場合は、単に起こってからのコールバックを妨げる:ジョシュStodolaは


<asp:Button runat="server" ID="Save" 
    OnClientClick="if (!confirm('Are you sure?')) return false;" /> 
+0

これは賛否両論の回答です。 – NotMe

1

を指摘したようにあなたのような何かをしたい:

<asp:button runat="server" id="mybutton" 
OnClientClick="return confirm('delete?');" /> 
+2

ユーザーがキャンセルをクリックした場合(confirm関数がfalseを返す場合)、clickイベントからのみ戻ります。 http://vaultofthoughts.net/OnClientClickBreaksValidation.aspx –

+0

@Josh:私はそれを知らなかった。おそらく、私は.Netのクライアント側の検証に悩まされていないからでしょう。リンク/情報ありがとう。 – NotMe

0

私はいつもASP.NET AJAX Control ToolkitでModalPopupを使用しているような確認ボックスのために別のデザインを使いたいと思っています。そうすればjavascriptに触れる必要はなく、モーダルポップアップのボタンをクリックすると私にポストバックが与えられるので、何が起こっているのかをもっとコントロールすることができます。

0

あなたはこのような何かを行うことができるはず - 彼らがそう選択した場合にのみ、バックポストを起動します:

<asp:Button ID="btnDelete" text="Delete" runat="server" 
OnClick="DoDeleteFunction();" 
OnClientClick="return confirm('Are you sure you want to delete?')"> 
</asp:Button> 
0

は、なぜあなたは背後にあるコードに応答を送信したいですか? あなたのできることはあなたのボタンの中にあります。キャンセルするだけでポストバックはできません。基本的な考え方だ

<asp:button id="mybutton" runat="server" 
onclientclick="javascript:if(!confirm('Confirm delete?')) return false;" /> 

は、次のような何かを行います。あなたが本当にそれがキャンセルされてもポストバックし、確認応答を渡す必要がある場合は、個人的に、私はASPに:フォームに非表示を追加し、JavaScriptが隠しフィールドの値を適切に設定する。

0

あなたは、このようなクライアント側の確認ダイアログ表示することができます。ユーザーは、はいで確認ダイアログを答える場合ポストバックにのみ実行されます

<asp:Button ID="btnDelete" runat="server" 
    OnClientClick="return confirm('really delete?');" 
    OnClick="btnDelete_Click" /> 

を。それ以外の場合は、ポストバックは発生せず、サーバ側ハンドラ(btnDelete_Click)は呼び出されません。

0

ASP.NET AJAXをご利用いただける場合はConfirmButtonExtenderをご利用ください。

通常どおり、削除ボタンのコードを後で配線します。次に、確認エクステンダを添付します。自動的に適切なJavaScriptが挿入され、ブラウザのアラートスタイルではなくblingを使用してモーダル確認が行われ、通常どおりに処理されるか、ユーザーの決定に基づいてキャンセルされます。

0

私はこのために標準のボタンコントロールをサブクラス化することをお勧めします。そうすれば、将来コードを再利用することができます。あなたはこれをやったら

namespace MyApp.Controls 
{ 
    public class PromptButton 
    { 
     public string Prompt { get; set; } 

     protected override void OnPreRender(EventArgs e) 
     { 
      base.OnPreRender(e); 

      if (!string.IsNullOrEmpty(Prompt)) 
      { 
       // Escape apostrophe's in the prompt message 
       string safePrompt = Prompt.Replace("'", "\'"); 

       // Add the onClick to show the alert box when clicked 
       Attributes.Add("onClick", string.Format("return confirm('{0}')", safePrompt)); 
      } 
     } 
    } 
} 

、あなたのASPXページの上部にあるか、web.configファイル内の参照を追加することができます:あなたのページでは

<%@ Register Assembly="MyAssembly" Namespace="MyApp.Controls" TagPrefix="app" %> 

を、あなたは、次を使用したいです:

<app:PromptButton ID="PromptButton1" Prompt="Are you sure?" OnClick="PromptButton1_Click" runat="server" /> 

これは、表示されているダイアログボックスを確認して、ユーザーがクリック「OK」場合、ポストバックが発生するJavascriptをもたらすであろう。ユーザーが[キャンセル]をクリックすると、何も起こりません。

最初はもう少し作業がありましたが、コードはずっと再利用可能で、別のライブラリに移動して複数のプロジェクトで使用することもできます。

関連する問題