Validation Application BlockのASP.NET連携

前項でも書いたとおり、Validation Application Block(以下VAB)ではオブジェクトに対する値の検証を行うのですが、さらにフロント層での検証を行うこともできます。
ASP.NET, Windows Forms, WCFがサポートされていますが、ここではASP.NETとの連携について触れます。
検証対象のクラスは前項のとおりに用意します。属性による指定でも構成ファイルによる指定でも同様なので、本例では属性による指定を行います。

public class TestData
{
  ...
  [StringLengthValidator(10)]
  public string Data1
  {
    get { return data1; }
    set { data1 = value; }
  }

  [StringLengthValidator(5)]
  [RegexValidator("^a")]
  public string Data2
  {
    get { return data2; }
    set { data2 = value; }
  }
  ...
}

これに対して、ASP.NETによるページを用意します。

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Namespace="Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet"
    Assembly="Microsoft.Practices.EnterpriseLibrary.Validation.Integration.AspNet"
    TagPrefix="entlib" %>
  ...
  <asp:TextBox ID="TextBox1" runat="server" />
  <entlib:PropertyProxyValidator ID="Text1Proxy" runat="server"
    ControlToValidate="TextBox1" SourceTypeName="Library.TestData" PropertyName="Data1" />
  <asp:TextBox ID="TextBox2" runat="server" />
  <entlib:PropertyProxyValidator ID="Text2Proxy" runat="server"
    ControlToValidate="TextBox2" SourceTypeName="Library.TestData" PropertyName="Data2" />
  ...

PropertyProxyValidatorコントロールは、VABでの検証を行い、結果はASP.NET標準のValidatorとして扱う(すなわち、Page.IsValidに反映される)コントロールです。下記のプロパティを設定しています。

ControlToValidate
ASP.NET標準のValidatorと同様に、検証対象のコントロールIDを指定します。
SourceTypeName
検証を行う際に参照する型を指定します。この型に対する検証内容を入力コントロールの値に対して行います。
PropertyName
SourceTypeNameで指定した型内のプロパティ名を指定します。入力コントロールの値を用いて、このプロパティに対して設定された検証を行います。

この設定で、プレゼンテーション層での検証とビジネス層での検証を単一の設定で行うことが可能になります。