ASP.NET サーバー コントロールのクライアント側検証
更新 : 2007 年 11 月
ユーザーが使用しているブラウザがダイナミック HTML (DHTML) をサポートしている場合、ASP.NET 検証コントロールはクライアント スクリプトを使用して検証を行うことができます。コントロールがサーバーへのラウンド トリップなしにすぐにフィードバックを返すため、ページ上でのユーザーの操作性が向上します。
ほとんどの状況では、クライアント側の検証を使用するにあたって、ページまたは検証コントロールに変更を加える必要はありません。このコントロールはブラウザが DHTML をサポートしているかどうかを自動的に検出し、それに応じてチェックを実行します。クライアント側の検証では、サーバー側の検証と同じエラー表示機構が使用されます。
セキュリティに関するメモ : |
---|
検証は、クライアント側で既に実行されていてもサーバーで実行されます。これにより、サーバー コードで有効性状態を確認でき、クライアント側検証をバイパスしたユーザーに対しても検証を行うことができます。 |
クライアント側の検証における相違点
クライアント側で検証が実行される場合、検証コントロールには以下の特徴が加わります。
検証エラー メッセージを一覧表示する場合は、ユーザーがページを送信したときに表示されるメッセージ ボックスに一覧を表示できます。詳細については、「方法 : ASP.NET サーバー コントロールに対する検証エラー メッセージの表示を制御する」を参照してください。
検証コントロールのオブジェクト モデルがクライアント上では少し異なります。このトピックの「クライアント検証のオブジェクト モデル」を参照してください。
クライアント側の検証に関連して、いくつかの小さな違いがあります。
クライアント側の検証が有効である場合は、クライアント側の検証を実行するために使用されるスクリプト ライブラリへの参照がページに含まれます。
RegularExpressionValidator コントロールを使用するとき、ECMAScript 互換言語 (Microsoft JScript など) が利用できる場合は、式をクライアント上でチェックできます。クライアント側での正規表現のチェックは、Regex クラスを使用してサーバー上で行われる正規表現のチェックとは少し異なります。
ページの送信前に Click イベントを受け取って処理するクライアント側のメソッドがページに含まれます。
クライアント検証のオブジェクト モデル
検証コントロールは、クライアント側でもサーバー側とほとんど同じオブジェクト モデルを提供します。たとえば、クライアント側でもサーバー側でも同じ方法で、検証コントロールの IsValid プロパティを読み取って検証をテストできます。
ただし、ページ レベルで公開される検証情報には違いがあります。サーバー上ではページはプロパティをサポートしますが、クライアント上ではグローバル変数を含みます。ページ上で公開される情報の違いを次の表に示します。
クライアント側のページ変数 |
サーバー側のページ プロパティ |
---|---|
Page_IsValid |
IsValid |
Page_Validators (配列) ページ上のすべての検証コントロールへの参照を含みます。 |
Validators (コレクション) すべての検証コントロールへの参照を含みます。 |
Page_ValidationActive 検証を行うかどうかを指定する Boolean 型の値です。プログラムによりクライアント側の検証をオフにするには、この変数を false に設定します。 |
同等の項目はありません。 |
メモ : |
---|
ページに関連する検証情報は、すべて読み取り専用と考えてください。 |
クライアント側の検証でエラーが発生した場合のページのポスト
クライアント側の検証が可能でも、クライアント側では行わずに、サーバー側の検証のみを実行することが必要な場合があります。たとえば、検証においてサーバー側でしか得ることができない情報やリソース (データベースへのアクセスなど) が必要となる場合は、サーバー側の検証が必要です。
既定では、クライアント側の検証を実行してページ上にエラーがある場合、ユーザーはサーバーにページをポストできません。ただし、エラーがあってもユーザーがページをポストできるようにすることが必要な場合もあります。たとえば、ページ上にキャンセル ボタンまたは移動ボタンが用意されているとき、コントロールの検証結果に関係なく、これらのボタンを押したときにページが送信されるようにする必要がある場合もあります。詳細については、「方法 : ASP.NET サーバー コントロールの検証を無効にする」を参照してください。