.NET TIPS [ASP.NET]CustomValidatorコントロールでクライアント検証を有効にするには?山田 祥寛2005/03/25 |
![]() |
|
「TIPS:[ASP.NET]CustomValidatorコントロールでマスタ重複チェックを実装するには?」でも紹介したように、CustomValidatorコントロールを利用することで標準的な検証コントロールでは対応していない独自の検証ルールをアプリケーションに追加できる。
前掲のTIPSでは、このCustomValidatorコントロールを利用することで、サーバサイドで実行される検証ルールを定義してみた。しかし、クライアント/サーバ間の無用なトラフィックを少しでも軽減するためには、サーバサイド検証だけではなく、クライアントサイドでの検証も有効にしておくのが好ましい。これによって、クライアントサイドでの検証を擦り抜けたデータだけがサーバサイドで検出されることになるので、不要な通信の行き来を最低限に抑えられるというわけだ。
本稿では、CustomValidatorコントロールでクライアントサイド検証を有効にした例として、フォーム要素内の文字列長チェックの実装例を示す。なお、サーバサイド検証の実装方法については、本稿では割愛するので、興味のある方は前掲のTIPSを併せて参照していただきたい。
それではまず、具体的なコードを眺めてみることにしよう。前述したように、このプログラムではサーバサイドだけではなく、クライアントサイド(JavaScriptを使用)でも同じロジックにより検証を行っている。
|
|
CustomValidatorコントロールで文字列チェックを実現するサンプル・プログラム(C#版:customValidate_cs.aspx) |
|
|
CustomValidatorコントロールで文字列チェックを実現するサンプル・プログラム(VB.NET版:customValidate_vb.aspx) |
CustomValidatorコントロールでクライアントサイド検証を有効にする場合のポイントは、以下の2点だ。
(1)ClientValidationFunction属性を指定する
CustomValidatorコントロールでは、サーバ側の検証メソッド(本稿の例では、cusTitle_Validateメソッド)をOnServerValidate属性で指定できるのと同様に、クライアント側の検証メソッドをClientValidationFunction属性で定義することができる。ここでは、サーバ側の検証メソッドとクライアント側の検証メソッドを同名に設定しているが、もちろん、この名前は異なっていても構わない。
上記プログラムのように指定した場合には、クライアントサイド・スクリプトとして、以下のようなシグネチャを持つ検証メソッドを用意する必要がある。
言語 | シグニチャ |
JavaScript | function cusTitle_Validate(source, arguments) |
VBScript | Sub cusTitle_Validate(source, arguments) |
![]() |
|
クライアント側における検証メソッドのシグニチャ |
クライアントサイド・スクリプトとしては、(当然)JavaScript、VBScriptなどのスクリプト言語を採用することができるが、クライアント環境を選ばないという観点で見れば、JavaScriptを採用しておくのが無難だろう。
また、ClientValidatorFunction属性を指定した場合にも、EnableClientScript属性がFalseに設定されている場合には(デフォルトはTrue)、クライアントサイド検証は無効になってしまうので注意すること。
(2)検証結果はIsValidプロパティにセットする
検証対象となる入力コントロールの値には、検証メソッドの第2パラメータとして渡されるオブジェクトのValueプロパティを介してアクセスすることが可能だ。ここでは、取得した値の文字列長を取得し、30文字以内であるかどうかを確認している。
検証結果は、同じ第2パラメータのオブジェクトのIsValidプロパティにtrue/falseをセットすればよい。IsValidプロパティがtrueである場合にCustomValidatorコントロールは検証処理に成功したものと見なす。
以上を理解したら、さっそく上記のサンプル・コードを実行してみよう。テキストボックスに30文字以上の文字列を入力した場合に、以下のようなエラー・メッセージが表示されば成功だ。
![]() |
サンプル・プログラム(customValidate_cs.aspx/customValidate_vb.aspx)の実行結果 |
なお、クライアント検証を有効にした場合にも、サーバサイド検証を無効にすることはできないので注意すること。そうした意味で、クライアント検証はあくまでトラフィックを軽減するための予備的な役割と考えるべきだ。ブラウザがクライアントサイド・スクリプトに対応していない、ユーザーがクライアントサイド・スクリプトを無効にしている場合に備えて、サーバサイド検証は最終的なチェックの場として必ず実装しなければならない。
カテゴリ:Webフォーム 処理対象:検証 使用キーワード:CustomValidatorコントロール 関連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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
![]() |
|
|
|
![]() |