次の方法で共有


必要なフィールド検証コントロールのサンプル

ここで説明する必要なフィールド検証コントロールは、「基本検証コントロールのサンプル」で説明する基本検証コントロールを拡張します。この検証コントロールは、次の機能を基本クラスに追加します。

  • 必要なフィールドの初期値をページ開発者が設定するための、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

参照

検証コントロールのサンプル | 基本検証コントロールのサンプル | 正規表現検証コントロールのサンプル | 検証コントロールのスクリプト ライブラリのサンプル | 検証コントロール構成ファイルのサンプル | 検証コントロールのテスト ページのサンプル | 検証コントロールの開発