質問者
Validatorのキャンセル

質問
すべての返信
-
なるほど、そうですか。
試しにとても簡単なサンプルを作成してみました。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 で行いました。
-
他の種類の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です。
-
よっしぃ さんからの引用 ただ、EnableClientScript プロパティの値をtrueの場合の動作がMicrosoftが想定している動作なのかはわかりません。ブラウザによってはうまくいく場合もあるかもしれませんし。
ちなみに、私の環境はWindows2000 SP4, IE 6です。
生成されたHTMLソースを見てみると、ValidatorOnSubmitというjavascriptが動的に生成され、それがsubmit時に動くようなので、これを防ぐにはEnableClientScriptをfalseにするしかなさそうですね・・・。
-
なかじさん不在で話が進んで申し訳ありません。
trapemiya さんからの引用 生成されたHTMLソースを見てみると、ValidatorOnSubmitというjavascriptが動的に生成され、それがsubmit時に動くようなので、これを防ぐにはEnableClientScriptをfalseにするしかなさそうですね・・・。
formタグのonsubmitの部分ですね。
それだと、テキストボックスからフォーカスが外れた場合に検証が行われているのが腑に落ちないのでさらに調べてみました。
デバッグでASP.NETの生成したJavaScriptの部分を追っていくと、検証対象のコントロールのonblurに検証処理の呼び出しを設定する処理が行われていました。
プログラムでそう設定されているので、EnableClientScriptプロパティがtrueの時の動作はMicrosoftの仕様ですね。