none
Validatorのキャンセル RRS feed

  • 質問

  •  

    C#.net2005(WEBアプリケーション)を使ってユーザ登録画面を作っております。登録ボタン押下時、onclientclickイベントにconfirm(”登録しますか”)を記述しています。その際、confirmでキャンセルを押下してもvalidator処理が動いてしまいます。キャンセルボタン押下でvalidatorを動かないようにするにはどうすればよろしいですか。

     

    2006年6月26日 12:21

すべての返信

  • 詳しい状況がわからないのですが、キャンセルボタンのCauseValidationプロパティをfalseにセットすることで解決しないでしょうか?
    2006年6月27日 2:50
    モデレータ
  • すいません。ちょっと説明が足りませんでした。

    登録ボタン押下で、CONFIRM画面が表示されます。CONFIRM画面上の「はい」「キャンセル」どちらを押下してもVALIDATIONが動いてしまうのです。「キャンセル」押下時はcausevalidation=falseに設定したいのですが、CONFIRM画面上のボタンに組み込めるのでしょうか。

     

    2006年6月27日 8:30
  • onclientclickの処理の中でconfirm(”登録しますか”)でキャンセルだった場合にreturn falseとすればいいと思いますよ。

    2006年6月27日 9:01
  • 回答ありがとうございます。

    return confirm("登録しますか?")と記載しておりfalseは返しているのですが、
    validationが動いてしまいます。
    2006年6月28日 2:57
  • なるほど、そうですか。

    試しにとても簡単なサンプルを作成してみました。aspxのコードは以下の内容のものです。

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>無題のページ</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
            <asp:Button ID="Button1" runat="server" OnClientClick='return confirm("登録しますか?")'
                Text="Button" />
            <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1"
                ErrorMessage="RequiredFieldValidator">Fail</asp:RequiredFieldValidator></div>
        </form>
    </body>
    </html>

    この場合は、「登録しますか?」のダイアログボックスでキャンセルボタンを押すと検証は行われませんでした。

    Validatorの種類の問題でしょうか?

    サンプルではRequiredFieldValidator で行いました。

    2006年6月28日 6:32
  •  他の種類のValidatorについて調べてみました。

     ・System.Web.UI.WebControls.RangeValidator

     ・System.Web.UI.WebControls.CompareValidator

     ・System.Web.UI.WebControls.RegularExpressionValidator

     これら3つだと、なかじさんと同様に、「登録しますか?」のダイアログボックスでキャンセルボタンを押しても検証失敗のメッセージが表示されました。詳しくみると対象のコントロールのフォーカスが外れた段階で検証失敗のメッセージが表示されていました。

     これは、ValidatorのEnableClientScript プロパティの値をfalseにすれば、発生しなくなります。なかじさんの環境でもお試し下さい。System.Web.UI.WebControlsCustomValidator は試していませんが他のValidatorと同様ではないかと思います。

     ただ、EnableClientScript プロパティの値をtrueの場合の動作がMicrosoftが想定している動作なのかはわかりません。ブラウザによってはうまくいく場合もあるかもしれませんし。

     ちなみに、私の環境はWindows2000 SP4, IE 6です。

    2006年6月28日 7:13
  •  よっしぃ さんからの引用

     ただ、EnableClientScript プロパティの値をtrueの場合の動作がMicrosoftが想定している動作なのかはわかりません。ブラウザによってはうまくいく場合もあるかもしれませんし。

     ちなみに、私の環境はWindows2000 SP4, IE 6です。

    生成されたHTMLソースを見てみると、ValidatorOnSubmitというjavascriptが動的に生成され、それがsubmit時に動くようなので、これを防ぐにはEnableClientScriptをfalseにするしかなさそうですね・・・。

    2006年6月28日 8:59
    モデレータ
  •  なかじさん不在で話が進んで申し訳ありません。

     trapemiya さんからの引用

    生成されたHTMLソースを見てみると、ValidatorOnSubmitというjavascriptが動的に生成され、それがsubmit時に動くようなので、これを防ぐにはEnableClientScriptをfalseにするしかなさそうですね・・・。

     formタグのonsubmitの部分ですね。

     それだと、テキストボックスからフォーカスが外れた場合に検証が行われているのが腑に落ちないのでさらに調べてみました。

     デバッグでASP.NETの生成したJavaScriptの部分を追っていくと、検証対象のコントロールのonblurに検証処理の呼び出しを設定する処理が行われていました。

     プログラムでそう設定されているので、EnableClientScriptプロパティがtrueの時の動作はMicrosoftの仕様ですね。

    2006年6月29日 8:54
  • よっしぃさん、trapemiyaさん、ありがとうござました。

    いろいろ試してみましたが、単純ミスでした。

    ONCLIENTCLICKでFALSEがうまく返っていませんでした。

    if(confirm("処理を開始してよろしいですか?")==false) return false;;

     

    にて解決しました。

     

    2006年7月4日 11:30