方法 : ASP.NET サーバー コントロールをカスタム関数で検証する
更新 : 2007 年 11 月
既存の ASP.NET 検証コントロールで要件を満足できない場合は、カスタム検証関数を定義し、CustomValidator コントロールを使用して呼び出すことができます。サーバー側メソッドと同じロジックの関数を ECMAScript (JavaScript) で記述することにより、クライアント側検証を追加してページの送信前にユーザーの入力をチェックできます。
クライアント側チェックを使用する場合でも、サーバー側検証を実行する必要があります。サーバー側検証を使用すると、クライアント スクリプトを無効にしたり変更したりすることにより検証がバイパスされることを防止できます。
セキュリティに関するメモ : |
---|
既定では、ASP.NET Web ページは、悪意のあるユーザーがアプリケーションにスクリプトまたは HTML 要素を送信しようとしていないかどうかを自動的に検証します。詳細については、「スクリプトによる攻略の概要」を参照してください。 |
カスタム関数を使用してサーバー上で検証を実行するには
CustomValidator コントロールをページに追加し、次のプロパティを設定します。
プロパティ
説明
正当性をチェックしているコントロールの ID。
検証が不合格だった場合に表示される 1 つ以上のエラーのテキストと位置を指定するプロパティ。詳細については、「方法 : ASP.NET サーバー コントロールに対する検証エラー メッセージの表示を制御する」を参照してください。
コントロールの ServerValidate イベントに対して、サーバー ベースのイベント ハンドラを作成します。このイベントを呼び出して検証を実行します。メソッドには、次のシグネチャを記述します。
Protected Sub CustomValidator1_ServerValidate(ByVal _ source As System.Object, ByVal args As _ System.Web.UI.WebControls.ServerValidateEventArgs) _ Handles CustomValidator1.ServerValidate End Sub
protected void ValidationFunctionName(object source, ServerValidateEventArgs args) { }
source パラメータは、このイベントを発生させるカスタム検証コントロールへの参照です。また、プロパティ args.Value には、検証するユーザーの入力が含まれています。値が有効な場合は、args.IsValid を true に設定します。それ以外の場合は false に設定します。
カスタム検証を作成する方法のコード例を示します。イベント ハンドラは、ユーザーの入力が 8 文字以上の文字列かどうかを確認します。
Protected Sub TextValidate(ByVal source As System.Object, _ ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) _ Handles CustomValidator1.ServerValidate args.IsValid = (args.Value.Length >= 8) End Sub
protected void TextValidate(object source, ServerValidateEventArgs args) { args.IsValid = (args.Value.Length >= 8); }
次のようなコードを使用して、イベント ハンドラをメソッドにバインドします。
<asp:textbox id="TextBox1" runat="server"></asp:textbox> <asp:CustomValidator id="CustomValidator1" runat="server" OnServerValidate="TextValidate" ControlToValidate="TextBox1" ErrorMessage="Text must be 8 or more characters."> </asp:CustomValidator>
<asp:textbox id="TextBox1" runat="server"></asp:textbox> <asp:CustomValidator id="CustomValidator1" runat="server" OnServerValidate="TextValidate" ControlToValidate="TextBox1" ErrorMessage="Text must be 8 or more characters."> </asp:CustomValidator>
ASP.NET Web ページ コードにテストを追加して、有効性を確認します。詳細については、「方法 : ASP.NET サーバー コントロールの有効性をプログラムでテストする」を参照してください。
クライアント上にカスタム検証ロジックを作成するには
ECMAScript (JavaScript、JScript) を使用して、検証関数を作成します。
カスタムのクライアント側検証のコード例を次に示します。これはページのコードの一部であり、CustomValidator コントロールによって参照される TextBox コントロールが示されています。検証コントロールは、validateLength というクライアント スクリプト関数を呼び出して、ユーザーが TextBox コントロールに 8 文字以上の文字列を入力したかどうかを確認します。
<script type="text/javascript"> function validateLength(oSrc, args){ args.IsValid = (args.Value.length >= 8); } </script>
<script type="text/javascript"> function validateLength(oSrc, args){ args.IsValid = (args.Value.length >= 8); } </script>
<asp:Textbox id="text1" runat="server" text=""></asp:Textbox> <asp:CustomValidator id="CustomValidator2" runat="server" ControlToValidate = "text1" ErrorMessage = "You must enter at least 8 characters!" ClientValidationFunction="validateLength" > </asp:CustomValidator>
<asp:Textbox id="text1" runat="server" text=""></asp:Textbox> <asp:CustomValidator id="CustomValidator2" runat="server" ControlToValidate = "text1" ErrorMessage = "You must enter at least 8 characters!" ClientValidationFunction="validateLength" > </asp:CustomValidator>
ASP.NET Web ページ コードにテストを追加して、有効性を確認します。詳細については、「方法 : ASP.NET サーバー コントロールの有効性をプログラムでテストする」を参照してください。