ここで説明する必要なフィールド検証コントロールは、「基本検証コントロールのサンプル」で説明する基本検証コントロールを拡張します。この検証コントロールは、次の機能を基本クラスに追加します。
- 必要なフィールドの初期値をページ開発者が設定するための、
InitialValue
という名前のプロパティを公開します。 EvaluateIsValid
メソッド (BaseDomValidator
で抽象メソッドとして定義されている) をオーバーライドして、ユーザーが他のフィールドに移動したときに、必要なフィールドの値が変化したかどうかを判定するためのロジックを提供します。- AddAttributesToRender (WebControl から継承した) をオーバーライドして、評価ロジックのクライアント側ハンドラを提供します。クライアント側ハンドラは、スクリプト ライブラリで定義する機能です。
サンプルをコンパイルしてビルドするには、「検証コントロールのサンプル」の指示を参照してください。サーバー コントロールでのクライアント側スクリプトの出力については、「サーバー コントロールのクライアント側機能」を参照してください。
// RequiredDomValidator.cs.
namespace DomValidators {
using System.ComponentModel;
using System.Diagnostics;
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
[
ToolboxData("<{0}:RequiredDomValidator runat=server ErrorMessage=\"RequiredDomValidator\"></{0}:RequiredDomValidator>")
]
public class RequiredDomValidator : BaseDomValidator {
[
Bindable(true),
Category("Behavior"),
DefaultValue(""),
Description("Initial Value")
]
public string InitialValue {
get {
object o = ViewState["InitialValue"];
return((o == null) ? String.Empty : (string)o);
}
set {
ViewState["InitialValue"] = value;
}
}
protected override void AddAttributesToRender(HtmlTextWriter writer) {
base.AddAttributesToRender(writer);
if (RenderUplevel) {
writer.AddAttribute("evaluationfunction", "RequiredFieldValidatorEvaluateIsValid");
writer.AddAttribute("initialvalue", InitialValue);
}
}
protected override bool EvaluateIsValid() {
// Get the control value; return true if it is not found.
string controlValue = GetControlValidationValue(ControlToValidate);
if (controlValue == null) {
Debug.Fail("Should have been caught by PropertiesValid check.");
return true;
}
// See if the control has changed.
return(!controlValue.Trim().Equals(InitialValue.Trim()));
}
}
}
[Visual Basic]
' RequiredDomValidator.vb
Option Explicit
Option Strict
Imports System.ComponentModel
Imports System.Diagnostics
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace DomValidators
<ToolboxData("<{0}:RequiredDomValidator runat=server ErrorMessage=""RequiredDomValidator""></{0}:RequiredDomValidator>")> _
Public Class RequiredDomValidator
Inherits BaseDomValidator
<Bindable(True), _
Category("Behavior"), _
DefaultValue(""), _
Description("Initial Value")> _
Public Property InitialValue() As String
Get
Dim o As Object = ViewState("InitialValue")
If o Is Nothing Then
Return String.Empty
Else
Return CStr(o)
End If
End Get
Set
ViewState("InitialValue") = value
End Set
End Property
Protected Overrides Sub AddAttributesToRender(writer As HtmlTextWriter)
MyBase.AddAttributesToRender(writer)
If MyBase.RenderUplevel Then
writer.AddAttribute("evaluationfunction", "RequiredFieldValidatorEvaluateIsValid")
writer.AddAttribute("initialvalue", InitialValue)
End If
End Sub
Protected Overrides Function EvaluateIsValid() As Boolean
' Get the control value; return true if it is not found.
Dim controlValue As String = GetControlValidationValue(MyBase.ControlToValidate)
If controlValue Is Nothing Then
Debug.Fail("Should have been caught by PropertiesValid check.")
Return True
End If
' See if the control has changed.
Return Not controlValue.Trim().Equals(InitialValue.Trim())
End Function
End Class
End Namespace
参照
検証コントロールのサンプル | 基本検証コントロールのサンプル | 正規表現検証コントロールのサンプル | 検証コントロールのスクリプト ライブラリのサンプル | 検証コントロール構成ファイルのサンプル | 検証コントロールのテスト ページのサンプル | 検証コントロールの開発