CustomValidator クラス
入力コントロールのユーザー定義検証を実行します。
名前空間: System.Web.UI.WebControls
アセンブリ: System.Web (system.web.dll 内)
構文
'宣言
Public Class CustomValidator
Inherits BaseValidator
'使用
Dim instance As CustomValidator
public class CustomValidator : BaseValidator
public ref class CustomValidator : public BaseValidator
public class CustomValidator extends BaseValidator
public class CustomValidator extends BaseValidator
適用できません。
解説
CustomValidator コントロールを使用して、入力コントロールのユーザー定義検証関数を提供します。CustomValidator コントロールは検証対象の入力コントロールとは別のコントロールで、検証メッセージを表示する位置を制御できます。
検証コントロールは常にサーバー上で検証を実行します。検証コントロールはクライアント側でも実装でき、スクリプト対応ブラウザ (Microsoft Internet Explorer 4.0 以降など) ではクライアント上で検証を実行できます。クライアント側の検証で、ユーザーによる入力をサーバーに送信する前にチェックすることによって、検証プロセスが強化されます。これによりフォームの送信前にクライアントでエラーを検出できるため、サーバー側での検証に必要な情報のラウンド トリップを避けることができます。
サーバー側検証関数を作成するには、検証を実行する ServerValidate イベント用のハンドラを作成します。検証対象の入力コントロールの文字列には、パラメータとしてイベント ハンドラに渡された ServerValidateEventArgs オブジェクトの Value プロパティを使用してアクセスできます。検証結果は、その後 ServerValidateEventArgs オブジェクトの IsValid プロパティに格納されます。
クライアント側検証関数を作成するには、最初に前のサーバー側検証関数を追加します。次に ASP.NET (.aspx) ページにクライアント側検証スクリプト関数を追加します。
VBScript (Visual Basic Scripting Edition) を使用している場合、関数は次の形式にする必要があります。
Sub ValidationFunctionName(source, arguments)
JScript を使用している場合、関数は次の形式にする必要があります。
function ValidationFunctionName(source, arguments)
source パラメータは、CustomValidator コントロールに表示される <span> 要素への参照です。これにより、InnerHtml 属性を変更するなど、<span> タグをプログラムで制御できます。arguments パラメータは、Value および IsValid という 2 つのプロパティを持つオブジェクトです。このパラメータを使用すると、検証するコントロールの値を取得したり、カスタムの検証ルーチンに基づいてその値が有効かどうかを示したりできます。
ClientValidationFunction プロパティを使用して、CustomValidator コントロールに関連付けられているクライアント側検証スクリプト関数の名前を指定します。スクリプト関数はクライアントで実行されるため、対象のブラウザがサポートする言語 (VBScript や JScript など) を使用する必要があります。
サーバー側の検証と同様、検証対象の入力コントロールの文字列には arguments パラメータの Value プロパティを使用してアクセスします。arguments パラメータの IsValid プロパティを設定することにより検証結果を返します。
注意 : |
---|
検証コントロールを使用する場合は、処理を実行する前に、サーバー側での検証の結果を常に確認する必要があります。ポストバックの後、イベント メソッドが呼び出される前に、ページは検証コントロールを呼び出して、結果を Page.IsValid プロパティに集約します (Validate メソッドを使用して、検証コントロールを明示的に呼び出すこともできます)。独自のコードでは、入力を処理する前に、Page.IsValid プロパティが true を返すことを確認する必要があります。検証チェックが失敗した場合、スクリプト対応のブラウザはポストバックが発生しないようできますが、検証されたデータを処理する前に、サーバー コードの Page.IsValid を常に確認することも必要です。 |
複数の検証コントロールを 1 つの入力コントロールに関連付けて、異なる基準で検証を実行できます。たとえば、複数の検証コントロールを TextBox コントロールに適用すると、買い物カゴに追加する品目の数量をユーザーが入力できるようになります。CustomValidator コントロールを使用すると、指定した値が必ず在庫量未満であるように設定できます。また RequiredFieldValidator コントロールを使用すると、ユーザーが必ず TextBox コントロールに値を入力するように設定できます。
メモ : |
---|
入力コントロールが空の場合、検証関数は呼び出されず、検証は成功します。RequiredFieldValidator コントロールを使用すると、データを入力コントロールに入力するようにユーザーに要求します。 |
ControlToValidate プロパティを設定せずに CustomValidator コントロールを使用できます。これは、通常、複数の入力コントロールを検証するとき、または CheckBox コントロールなどの検証コントロールを使用できない入力コントロールを検証するときに実行します。この場合、ServerValidate イベントのイベント ハンドラとクライアント側検証関数に渡される arguments パラメータの Value プロパティには、常に空の文字列 ("") が含まれます。ただし、サーバーとクライアントの両方の有効性を確認するために、これらの検証関数が必要に応じて呼び出される場合があります。検証する値にアクセスするには、検証対象の入力コントロールをプログラムにより参照し、適切なプロパティから値を取得します。たとえば、サーバーの CheckBox コントロールを検証する場合には、検証コントロールの ControlToValidate プロパティは設定せず、ServerValidate イベントのハンドラのために次のコードを使用します。
Sub ServerValidation (source As object, args As ServerValidateEventArgs)
args.IsValid = (CheckBox1.Checked = True)
End Sub
void ServerValidation (object source, ServerValidateEventArgs args)
{
args.IsValid = (CheckBox1.Checked == true);
}
検証コントロールの詳細については、「BaseValidator」を参照してください。
ユーザー補助
このコントロールに既定でレンダリングされるマークアップは、Web Content Accessibility Guidelines (WCAG) 1.0 の優先度 1 ガイドラインなどのユーザー補助に関する標準に適合しない可能性があります。このコントロールのユーザー補助サポートの詳細については、「ASP.NET コントロールとユーザー補助」を参照してください。
使用例
サーバー側の CustomValidator コントロールを作成する方法のコード例を次に示します。
セキュリティに関するメモ : |
---|
この例には、ユーザー入力を受け付けるテキスト ボックスがあります。これにより、セキュリティが脆弱になる可能性があります。既定では、ASP.NET Web ページによって、ユーザー入力にスクリプトまたは HTML 要素が含まれていないかどうかが検証されます。詳細については、「スクリプトによる攻略の概要」を参照してください。 |
<%@ Page Language="VB" AutoEventWireup="True" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>CustomValidator ServerValidate Example</title>
<script runat="server">
Sub ValidateBtn_OnClick(sender As Object, e As EventArgs)
' Display whether the page passed validation.
If Page.IsValid Then
Message.Text = "Page is valid."
Else
Message.Text = "Page is not valid!"
End If
End Sub
Sub ServerValidation(source As Object, args As ServerValidateEventArgs)
Try
' Test whether the value entered into the text box is even.
Dim num As Integer = Integer.Parse(args.Value)
args.IsValid = ((num mod 2) = 0)
Catch ex As Exception
args.IsValid = false
End Try
End Sub
</script>
</head>
<body>
<form id="form1" runat="server">
<h3>CustomValidator ServerValidate Example</h3>
<asp:Label id="Message"
Text="Enter an even number:"
Font-Names="Verdana"
Font-Size="10pt"
runat="server"
AssociatedControlID="Text1" />
<br />
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
Display="Static"
ErrorMessage="Not an even number!"
ForeColor="green"
Font-Names="verdana"
Font-Size="10pt"
OnServerValidate="ServerValidation"
runat="server"/>
<br />
<asp:Button id="Button1"
Text="Validate"
OnClick="ValidateBtn_OnClick"
runat="server"/>
</form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="True" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>CustomValidator ServerValidate Example</title>
<script runat="server">
void ValidateBtn_OnClick(object sender, EventArgs e)
{
// Display whether the page passed validation.
if (Page.IsValid)
{
Message.Text = "Page is valid.";
}
else
{
Message.Text = "Page is not valid!";
}
}
void ServerValidation(object source, ServerValidateEventArgs args)
{
try
{
// Test whether the value entered into the text box is even.
int i = int.Parse(args.Value);
args.IsValid = ((i%2) == 0);
}
catch(Exception ex)
{
args.IsValid = false;
}
}
</script>
</head>
<body>
<form id="form1" runat="server">
<h3>CustomValidator ServerValidate Example</h3>
<asp:Label id="Message"
Text="Enter an even number:"
Font-Names="Verdana"
Font-Size="10pt"
runat="server"
AssociatedControlID="Text1"/>
<br />
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
Display="Static"
ErrorMessage="Not an even number!"
ForeColor="green"
Font-Names="verdana"
Font-Size="10pt"
OnServerValidate="ServerValidation"
runat="server"/>
<br />
<asp:Button id="Button1"
Text="Validate"
OnClick="ValidateBtn_OnClick"
runat="server"/>
</form>
</body>
</html>
クライアント側の CustomValidator コントロールを作成する方法のコード例を次に示します。
<%@ Page Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Sub ValidateBtn_OnClick(ByVal sender As Object, ByVal e As EventArgs)
' Display whether the page passed validation.
If Page.IsValid Then
Message.Text = "Page is valid."
Else
Message.Text = "Page is not valid!"
End If
End Sub
Sub ServerValidation(ByVal source As Object, ByVal args As ServerValidateEventArgs)
Try
' Test whether the value entered into the text box is even.
Dim num As Integer = Integer.Parse(args.Value)
args.IsValid = ((num Mod 2) = 0)
Catch ex As Exception
args.IsValid = False
End Try
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>CustomValidator Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label id="Message"
Text="Enter an even number:"
Font-Size="10pt"
runat="server"
AssociatedControlID="Text1"/>
<br />
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
ClientValidationFunction="ClientValidate"
OnServerValidate="ServerValidation"
Display="Static"
ErrorMessage="Not an even number!"
ForeColor="green"
Font-Size="10pt"
runat="server"/>
<br />
<asp:Button id="Button1"
Text="Validate"
OnClick="ValidateBtn_OnClick"
runat="server"/>
</div>
</form>
</body>
</html>
<script type="text/javascript">
function ClientValidate(source, clientside_arguments)
{
if (clientside_arguments.Value % 2 == 0 )
{
clientside_arguments.IsValid=true;
}
else {clientside_arguments.IsValid=false};
}
</script>
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void ValidateBtn_OnClick(object sender, EventArgs e)
{
// Display whether the page passed validation.
if (Page.IsValid)
{
Message.Text = "Page is valid.";
}
else
{
Message.Text = "Page is not valid!";
}
}
void ServerValidation(object source, ServerValidateEventArgs args)
{
try
{
// Test whether the value entered into the text box is even.
int i = int.Parse(args.Value);
args.IsValid = ((i % 2) == 0);
}
catch (Exception ex)
{
args.IsValid = false;
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>CustomValidator Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label id="Message"
Text="Enter an even number:"
Font-Size="10pt"
runat="server"
AssociatedControlID="Text1"/>
<br />
<asp:TextBox id="Text1"
runat="server" />
<asp:CustomValidator id="CustomValidator1"
ControlToValidate="Text1"
ClientValidationFunction="ClientValidate"
OnServerValidate="ServerValidation"
Display="Static"
ErrorMessage="Not an even number!"
ForeColor="green"
Font-Size="10pt"
runat="server"/>
<br />
<asp:Button id="Button1"
Text="Validate"
OnClick="ValidateBtn_OnClick"
runat="server"/>
</div>
</form>
</body>
</html>
<script type="text/javascript">
function ClientValidate(source, clientside_arguments)
{
if (clientside_arguments.Value % 2 == 0 )
{
clientside_arguments.IsValid=true;
}
else {clientside_arguments.IsValid=false};
}
</script>
.NET Framework のセキュリティ
- AspNetHostingPermission (ホスト環境での動作に必要なアクセス許可)。要求値 : LinkDemand。アクセス許可値 : Minimal。
- AspNetHostingPermission (ホスト環境での動作に必要なアクセス許可)。要求値 : InheritanceDemand。アクセス許可値 : Minimal。
継承階層
System.Object
System.Web.UI.Control
System.Web.UI.WebControls.WebControl
System.Web.UI.WebControls.Label
System.Web.UI.WebControls.BaseValidator
System.Web.UI.WebControls.CustomValidator
スレッド セーフ
この型の public static (Visual Basicでは共有) メンバはすべて,スレッド セーフです。インスタンス メンバの場合は,スレッド セーフであるとは限りません。
プラットフォーム
Windows 98,Windows Server 2000 SP4,Windows CE,Windows Millennium Edition,Windows Mobile for Pocket PC,Windows Mobile for Smartphone,Windows Server 2003,Windows XP Media Center Edition,Windows XP Professional x64 Edition,Windows XP SP2,Windows XP Starter Edition
Microsoft .NET Framework 3.0 は Windows Vista,Microsoft Windows XP SP2,および Windows Server 2003 SP1 でサポートされています。
バージョン情報
.NET Framework
サポート対象 : 3.0,2.0,1.1,1.0
参照
関連項目
CustomValidator メンバ
System.Web.UI.WebControls 名前空間
BaseValidator
RequiredFieldValidator
ClientValidationFunction
ServerValidate
OnServerValidate
ServerValidateEventArgs
Value
IsValid