入力された値を独自のロジックで検証する - CustomValidatorの利用 - ASP.NET

入力された文字列を独自のロジックで検証したい場合があります。CustomValidatorを用いるとサーバー側で実装したロジックで検証できます。この記事では、CustomValidatorの利用方法を紹介します。

サンプルプログラム

UI

下図のUIを作成します。TextBox, CustomValidator, Button, Labelを配置します。


CustomValidatorの画面に表示されるメッセージはErrorMessageプロパティを編集して変更します。


CustomValidatorの検証対象のコントロールを指定します。ControlToValidateプロパティにテキストボックスのIDを設定します。

XML

Webフォームのコードは以下になります。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CustomValidatorDemo.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
      <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="入力形式が不正です" ControlToValidate="TextBox1" OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator><br />
      <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />
      <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </div>
    </form>
</body>
</html>

コード

CustomValidatorのServerValidateイベントを実装します。


以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomValidatorDemo
{
  public partial class Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
      if (Page.IsValid == true) {
        Label1.Text = "入力:" + TextBox1.Text;
      }
    }

    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {
      if (args.Value[0] == 'P') {
        args.IsValid = true;
      }
      else {
        args.IsValid = false;
      }

    }
  }
}

解説

ボタンがクリックされると、Page.IsValidプロパティの値を確認します。入力内容に問題が無ければ値はtrueであるため、ラベルに入力内容を表示します。
また、CustomValidatorのServerValidateイベントには、入力内容の検証ロジックを記述します。今回は先頭の文字が大文字の"P"であれば正しい入力とみなし、ServerValidateEventArgs オブジェクトのIsValidプロパティにtrueを設定します。先頭の文字が"p"でない場合は入力された文字は不正と判定し、ServerValidateEventArgs オブジェクトのIsValidプロパティにfalseを設定します。

実行結果

プロジェクトを実行します。Webブラウザが起動し、下図の画面が表示されます。


テキストボックスに"Test"と入力しました。入力後ボタンをクリックします。


入力した文字の"Test"の先頭の文字が"P"でなかったため、入力された文字が不正と判断されました。CustomValidatorのエラーメッセージが表示されます。


テキストボックスに"Penguin"と入力しました。入力後Buttonをクリックします。


先頭の文字が"P"であるため、検証は成功します。CustomValidatorのエラーメッセージは表示されません。また、Button1のClickイベントは実行され、ラベルに入力された文字列が表示されます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-01-06
作成日: 2014-07-17
iPentec all rights reserverd.