| 
 .NET TIPS [ASP.NET]CustomValidatorコントロールでマスタ重複チェックを実装するには?山田 祥寛2004/12/17  | 
![]()  | 
| 
 | 
|
ASP.NETには、検証サーバ・コントロール(以下、検証コントロール)と呼ばれる入力データ検証用のコントロールが豊富に用意されている。これら検証コントロールを利用することで、必須、範囲、比較、データ型、正規表現パターンなどの、基本的なデータ検証をプログラムレスで(コードを手動で記述することなく)実現できる。
しかし、実際にアプリケーションを構築していく中では、決してそのような単純な検証だけではない。例えば、複数の入力要素を複合的にチェックしたり、データベース上のデータとの整合を確認したりと、より複雑な検証ロジックを必要とする局面は多く存在する。そこで登場するのが、CustomValidatorコントロールだ。
CustomValidatorコントロールは、名前からも容易に想像できるように、標準の検証コントロールでは対応できない独自の検証ロジックを実装するためのコントロールだ。本稿では、CustomValidatorコントロールを利用して、データベース上のレコード重複チェックの機能を実装してみることにしよう。なお、本稿で示しているサンプル・プログラムを実行するには、あらかじめデータベース上に以下のようなテーブルを作成しておく必要がある。
| フィールド名 | データ型 | 概要 | 
| isbn | VARCHAR(30) | ISBNコード(主キー) | 
| title | VARCHAR(100) | 書名 | 
| publish | VARCHAR(20) | 出版社 | 
| booksテーブルのフィールド・レイアウト | ||
以下は、実際にCustomValidatorコントロールを利用して、レコードの重複チェック機能を実装したコードだ。
  | 
|
| レコード重複チェック機能を実装する.aspxファイル(C#の場合) | 
  | 
|
| レコード重複チェック機能を実装する.aspxファイル(VB.NETの場合) | 
CustomValidatorコントロールでは、サーバ側の検証メソッド(上記のコード例では、customValid_ServerValidateメソッド)をOnServerValidate属性で指定できる。ポストバックが発生したタイミングで、指定された検証メソッドが呼び出され、検証処理が行われるというわけだ。
検証対象となる入力コントロールの値には、検証メソッドのパラメータとして渡されるServerValidateEventArgsオブジェクト(System.Web.UI.WebControls名前空間)のValueプロパティを介してアクセスすることが可能だ。ここでは、取得した値(ISBNコード)をキーにbooksテーブルを検索し、同一のISBNコードを持つレコードが存在するかどうかを確認している。
検証結果は、ServerValidateEventArgsオブジェクトのIsValidプロパティにTrue/Falseでセットすればよい。IsValidプロパティがTrueである場合にCustomValidatorコントロールは検証処理に成功したものと見なす。
以下は、上記のサンプル・コードで重複するISBNコードを入力した場合の実行結果だ。本サンプルを試す場合には、あらかじめbooksテーブルに適当な値をセットしたうえで、Webフォームから重複するISBNコードを入力してみていただきたい。以下の画面は、試しに実行した結果だ。
![]()  | 
| マスタ重複チェックによりエラーが発生したところ | 
| booksテーブルに重複するISBNコードを持つレコードが存在する場合はエラーとなる。 | 
なお、本稿では検証に際してデータベース・サーバにアクセスする必要があるため、CustomValidatorコントロールのEnableClientScript属性によりクライアントサイドにおける検証処理を無効にしている(デフォルトでは有効になっている)。しかし、無用な通信トラフィックを減らすためにも、可能な場合には、クライアントサイドの検証は有効のままにしておくことが好ましい。
 CustomValidatorコントロールでクライアント検証を有効にする方法については、「TIPS:[ASP.NET]CustomValidatorコントロールでクライアント検証を有効にするには?」で紹介している。![]()
| カテゴリ:Webフォーム 処理対象:検証 使用キーワード:CustomValidatorコントロール 使用ライブラリ:ServerValidateEventArgsクラス(System.Web.UI.WebControls名前空間) 関連TIPS:[ASP.NET]CustomValidatorコントロールでクライアント検証を有効にするには?  | 
| 「.NET TIPS」 | 
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える 
 
  | 
 |






