- PR -

CustomValidatorのエラーをValidationSummaryでダイアログ表示

1
投稿者投稿内容
tokyo_eye
会議室デビュー日: 2003/09/11
投稿数: 12
投稿日時: 2003-09-11 19:17
はじめまして,よろしくお願いいたします。

ASP.NETで入力値のチェックに入力検査コントロールを使おうとしています。
以下のソースの画面では「TextBox1」と「Button1」があり,「Button1」を押したときに検証を実行するようにしています。
ValidationSummaryは「ShowSummary」「ShowMessageBox」ともに「True」の設定としています。

入力値がない場合は期待通り,RequiredFieldValidatorによってHTML画面とダイアログボックスの両方にエラーが表示されます。

しかしCustomValidatorのチェックでエラーとなる場合(この例では入力文字数が4文字より大きいとエラー),HTML画面にはエラー表示されるものの,ダイアログボックスは登場しません。

関係のありそうなスレッドを一通り読んでみたつもりですが,この問題に対する回答がみつからなかったので何か分かる方がいらっしゃいましたらご教授ください。


コード:
<%@ PAGE LANGUAGE="C#" %>
<html>
  <head>
  <title>CUSTOM VALIDATOR TEST</title>
  <script runat="server">
  void ServerValidate(object source, ServerValidateEventArgs args)
  {
    if (TextBox1.Text.Length > 4)
      args.IsValid = false;
    else
      args.IsValid = true;
  }
  </script>
  </head>
  <body>
    <form id="Form1" method="post" runat="server">
      <asp:TextBox id="TextBox1" runat="server">
      </asp:TextBox>
      <asp:Button id="Button1" runat="server" Text="チェック!">
      </asp:Button>
      <asp:CustomValidator
           id="CustomValidator1"
           runat="server"
           ErrorMessage="入力できる文字は4文字までです!"
           ControlToValidate="TextBox1"
           OnServerValidate="ServerValidate"
           Display="None">
      </asp:CustomValidator>
      <asp:RequiredFieldValidator
           id="RequiredFieldValidator1"
           runat="server"
           ControlToValidate="TextBox1"
           ErrorMessage="値を入力してください!"
           Display="None">
      </asp:RequiredFieldValidator>
      <asp:ValidationSummary
           id="ValidationSummary1"
           runat="server"
           ShowMessageBox="True"
           ShowSummary="True">
      </asp:ValidationSummary>
    </form>
  </body>
</html>


tokyo_eye
会議室デビュー日: 2003/09/11
投稿数: 12
投稿日時: 2003-09-11 20:57
失礼しました。
ほかのスレッドを注意深く読んでみたら,今回の問題に参考になりそうな書き込みがみつかりました。
CustomValidatorの検証処理をクライアントに行わせる(HTMLソースに記述するJavaScriptに処理させる)と,ValidationSummaryのダイアログボックス表示にも対応できるようですね。
もとのソースでは,CustomValidatorにサーバ側での検証のみ行わせていたので,クライアント側の処理となるダイアログボックスを制御できなかった,とゆうふうに理解しました。
もし考え間違えでしたら,ご指摘頂けると幸いです。

(ソースの修正)
CustomValidatorに以下のプロパティを追加し,
 ClientValidationFunction="ClientValidate"

以下のクライアント側の検証メソッドを定義しました。

コード:
    <script language="javascript">
      function ClientValidate(source, arguments)
      {
        if (document.Form1.TextBox1.value.length > 4)
          arguments.IsValid = false;
        else
          arguments.IsValid = true;
      }
    </script>

1

スキルアップ/キャリアアップ(JOB@IT)