ASP.NET Web ページにおけるユーザー入力の検証
更新 : 2007 年 11 月
検証コントロールを使用して、ASP.NET Web ページに入力の検証を追加できます。検証コントロールは、すべての一般的な種類の標準検証 (特定の範囲内の有効な日付や値のテストなど) に対して使いやすい機構を提供します。また、カスタム検証を記述する手段も提供します。さらに、検証コントロールでは、ユーザーへのエラー情報の表示をカスタマイズできます。
検証コントロールは、HTML コントロールと Web サーバー コントロールの両方を含む ASP.NET Web ページ上の任意のコントロールと共に使用できます。詳細については、「ASP.NET Web サーバー コントロールの概要」を参照してください。
セキュリティに関するメモ : |
---|
既定では、ASP.NET Web ページは悪意のある入力があるかどうかを自動的にチェックします。詳細については、「スクリプトによる攻略の概要」を参照してください。 |
検証コントロールの使用
検証コントロールをページに追加することにより、ユーザーの入力を検証できます。検証コントロールは、他のサーバー コントロールと同じように追加できます。範囲のチェックやパターン一致など、各種の検証に対してコントロールが用意されています。検証の種類の完全な一覧については、「ASP.NET サーバー コントロールの検証の種類」を参照してください。各検証コントロールは、ページ上のほかの場所にある入力コントロール (サーバー コントロール) を参照します。ユーザー入力がページの送信時などに処理されると、検証コントロールはユーザー入力をテストし、エントリがテストに合格したかどうかを示す値をプロパティに設定します。すべての検証コントロールが呼び出された後に、失敗した検証チェックがあるかどうかを示す値がページのプロパティに設定されます。
検証コントロールを検証グループに関連付けることにより、同じグループに属する検証コントロールを一度にテストできます。検証グループを使用して、ページ上の関連付けられたコントロールの検証を選択的に有効または無効にできます。ValidationSummary コントロールの表示、GetValidators メソッドの呼び出しなどのその他の検証操作は、検証グループを参照できます。
ページおよび個別のコントロールの状態を独自のコードでテストできます。たとえば、ユーザーによって入力された情報でデータ レコードを更新する前に、検証コントロールの状態をテストできます。無効な状態を検出した場合は、更新を行いません。一般に、いずれかの検証チェックが不合格になった場合は、独自の処理をすべてスキップし、ページをユーザーに返します。エラーを検出した検証コントロールは、エラー メッセージを生成してページに表示します。ValidationSummary コントロールを使用すると、すべての検証エラーを 1 か所に表示できます。
メモ : |
---|
GridView、FormView、DetailsView の各コントロールなどのデータを更新、挿入、または削除するデータ連結コントロールは、データの更新操作を実行する前に検証チェックが正常終了しているかどうかを自動的に確認します。 |
検証が発生するタイミング
検証コントロールは、サーバー コードで入力チェックを行います。ユーザーがページをサーバーに送信すると、検証コントロールが起動され、ユーザーの入力がコントロールごとにチェックされます。いずれかの入力コントロールで検証エラーが検出されると、ページ全体が無効な状態に設定されるため、コードを実行する前に有効性をテストできます。検証は、ページの初期化後 (つまり、ビューステートおよびポストバック データが処理された後) でチェックまたはクリックのイベント ハンドラが呼び出される前に実行されます。
ユーザーが使用しているブラウザが ECMAScript (Javascript) をサポートしている場合、検証コントロールはクライアント スクリプトを使用して検証を行うこともできます。これにより、ページの応答時間が短縮されます。エラーがすぐに検出され、ユーザーがエラーを含むコントロールから移動すると、すぐにエラー メッセージが表示されるからです。クライアント側の検証が使用できる場合は、エラー メッセージのレイアウトを詳細に制御でき、エラーの一覧をメッセージ ボックスに表示できます。詳細については、「ASP.NET サーバー コントロールのクライアント側検証」を参照してください。
ASP.NET は、クライアント上で検証コントロールが既に検証を行った場合でも、サーバー上で検証を実行します。それにより、サーバー ベースのイベント ハンドラ内で有効性をテストできます。また、サーバー上の再検出によって、クライアント スクリプトを無効にしたり変更したりすることで検証がバイパスされることを防ぎます。
検証コントロールの Validate メソッドを呼び出すと、独自のコードで検証機能を呼び出すことができます。詳細については、「方法 : ASP.NET サーバー コントロールをプログラムで検証する」を参照してください。
複数の条件の検証
一般に、各検証コントロールは 1 つのテストを実行します。ただし、複数の条件のチェックが必要な場合もあります。たとえば、特定のフィールドを必須フィールドにし、同時に特定の範囲内の日付だけを受け入れるように制限するような場合です。
ページの入力コントロールには、複数の検証コントロールを追加できます。その場合、コントロールが実行するテストは AND 論理演算子を使用して解決されます。つまり、ユーザーが入力するデータが有効であると見なされるには、すべてのテストに合格する必要があります。
いくつかの異なる入力情報が有効となる場合があります。たとえば、電話番号の入力を求める場合、ユーザーは市内通話用の番号、市外通話用の番号、または国際電話用の番号を入力できます。このような場合に複数の検証コントロールを使用すると、ユーザーの入力はすべてのテストに合格する必要があるので、期待どおりには動作しません。このような種類のテスト (いずれかのテストに合格すると有効になる OR 論理演算) を実行する場合は、RegularExpressionValidator 検証コントロールを使用し、コントロール内で複数の有効なパターンを指定します。または、CustomValidator 検証コントロールを使用して独自の検証コードを記述します。
エラー情報の表示
検証コントロールは、通常はページに表示されません。ただし、コントロールがエラーを検出した場合は、指定したエラー メッセージ テキストを表示します。エラー メッセージは、次の表に示すように各種の方法で表示できます。
表示方法 |
説明 |
---|---|
[インライン] |
各検証コントロールは、エラー メッセージを個別に表示できます (通常はエラーが発生したコントロールの横)。 |
概要 |
検証エラーをまとめて 1 か所 (ページの一番上など) に表示できます。このオプションは、多くの場合、エラーが発生した入力フィールドの横にメッセージを表示するオプションと組み合わせて使用します。ユーザーが使用しているブラウザが Internet Explorer 4.0 以降である場合は、エラーの一覧をメッセージ ボックスに表示できます。 検証グループを使用する場合は、各グループに ValidationSummary コントロールが必要です。 |
個別と一覧 |
個別に表示するエラー メッセージと一覧に表示するメッセージを異なる内容にできます。このオプションを使用すると、短いエラー メッセージを個別に表示し、詳細情報を一覧に表示できます。 |
カスタム |
エラー情報をキャプチャして独自の出力をデザインすることにより、エラー メッセージをカスタマイズできます。 |
個別に表示するオプションまたは一覧表示するオプションを使用する場合は、エラー メッセージ テキストの書式を HTML で指定できます。
セキュリティに関するメモ : |
---|
カスタム エラー メッセージを作成する場合は、悪意のあるユーザーがアプリケーションの安全性を脅かすのに役立つような情報が表示されることのないように注意してください。詳細については、「方法 : 安全なエラー メッセージを表示する」を参照してください。 |
検証のオブジェクト モデル
個別の検証コントロールおよびページによって公開されるオブジェクト モデルを使用して、検証コントロールとやり取りできます。各検証コントロールは、独自の IsValid プロパティを公開します。このプロパティを使用して、そのコントロールでの検証テストの結果を確認できます。ページ上のすべての検証コントロールの IsValid 状態をまとめる IsValid プロパティも公開されます。このプロパティによって、1 つのテストを実行するだけで、各自の処理を継続できるかどうかを判断できます。
ページ上のすべての検証コントロールのリストを含む Validators コレクションも公開されます。このコレクションに対してループを実行して、個別の検証コントロールの状態を調べることができます。
メモ : |
---|
クライアント側の検証では、オブジェクト モデルにいくつかの違いがあります。詳細については、「ASP.NET サーバー コントロールのクライアント側検証」を参照してください。 |
検証のカスタマイズ
検証プロセスは次の方法でカスタマイズできます。
エラー メッセージの形式、テキスト、および場所を指定できます。さらに、エラー メッセージを個別または一覧のどちらで表示するかも指定できます。
CustomValidator コントロールを使用してカスタム検証を作成できます。このコントロールは、独自に作成したロジックを呼び出しますが、エラー状態の設定、エラー メッセージの表示など、それ以外の点では他の検証コントロールと同じように動作します。これにより、ページの検証フレームワークを使用しながらカスタム検証ロジックを簡単に作成できます。
クライアント側の検証では、その検証の呼び出しを受け取って、独自の検証ロジックを代わりに使用したり追加したりできます。