WebFormで簡単にDynamic Data化を実施する
ASP.NET MVCやDynamic Dataでは、簡単にData Annotationによるデータ検証を使用できるのが特徴です。しかし、Web Form単体の場合は従来の検証コントロールなどを使用すれば実現できていたので、諸々の設定に手間がかかるData Annotationを積極的に使用する方は少なかったのではないでしょうか。ASP.NET 4では、標準のデータサーバーコントロールにEnableDynamicData拡張メソッドが実装され、簡単にData Annotationを使用したデータ検証が実現できるようになりました(図1~3)。

まずは、各種データサーバーコントロールに適用するData Annotationの検証を記載します。コードベースで入力検証を行うために、Entity Data Modelのメタデータを記載するパーシャルクラスを作成します。なお、本サンプルではシンプルに見せるため、家族情報を入力するテーブルとEntity Data Modelを使用しています。
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace EnableDD
{
// モデルクラスに関連付けるメタデータクラスの指定
[MetadataType(typeof(FamilyAnnotation))]
public partial class NaokisFamily
{
}
// FamilyAnnotationエンティティ型のプロパティを記載
public class FamilyAnnotation
{
[DisplayName("ID")]
[Required(ErrorMessage = "IDは必須入力です")]
public int ID { get; set; }
[DisplayName("あだ名")]
[Required(ErrorMessage = "あだ名は必須入力です")]
public string nickname { get; set; }
[DisplayName("年齢")]
[Range(0, 100, ErrorMessage = "年齢は0歳から100歳までの範囲で入力してください")]
public int age { get; set; }
[DisplayName("続柄")]
[StringLength(10, ErrorMessage = "続柄は10文字以内で入力してください")]
public string relationship { get; set; }
}
}
Required属性は必須入力を、DisplayName属性は表示される列ヘッダーの文字を、Range属性では入力数値の範囲を、StringLength属性は入力文字制限をそれぞれ指定しています。続いて、このパーシャルクラスによる検証を実施するデータサーバーコントロールなどの記載は以下のとおりです。
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
ForeColor="#FF3300" />
<asp:DynamicValidator ID="DynamicValidator1" runat="server" ControlToValidate="GridView1" Display="None" />
<asp:GridView ID="GridView1" runat="server"
DataSourceID="EntityDataSource1" >
<Columns>
<asp:CommandField ShowEditButton="True" />
</Columns>
</asp:GridView>
<asp:EntityDataSource ID="EntityDataSource1" runat="server"
ConnectionString="name=FamilyEntities" DefaultContainerName="FamilyEntities"
EnableDelete="True" EnableFlattening="False" EnableInsert="True"
EnableUpdate="True" EntitySetName="NaokisFamily" >
</asp:EntityDataSource>
</asp:Content>
使用しているサーバーコントロールは、ValidationSummary、DynamicValidator、GridView、EntityDataSourceの4つです。ValidationSummaryコントロールは配置しただけで、DynamicValidatorコントロールは検証するサーバーコントロールをControlToValidateプロパティで設定します。ここではGridViewコントロールが対象です。GridViewコントロールはデータソースにEntityDataSourceコントロールを使用すること、編集ボタンを表示することの2つを設定しています。EntityDataSourceコントロールは対象のEntity DataModelと該当のエンティティなどを指定しています。設定はウィザードに沿って行うだけです。
配置については非常にシンプルにできるのがご確認いただけたかと思います。最後に肝心のEnableDynamicDataメソッドの使用方法です。
protected void Page_Init(object sender, EventArgs e)
{
// パラメータのエンティティオブジェクトを使用してDynamic Dataの動作を有効化する
GridView1.EnableDynamicData(typeof(NaokisFamily));
}
コメントのとおりですが、EnableDynamicDataメソッドはパラメータにエンティティオブジェクトを使用してDynamic Dataの動作を有効化します。実質、諸々の準備後にDynamicValidatorコントロールを配置して、データサーバーコントロールのEnableDynamicDataメソッドを使用する流れです。実行結果は図1~3のようになります。
実際に作成してみると体感頂けるかと思いますが、比較的容易に実現できます。既存のWeb FormアプリケーションにDynamic Dataすべてではなく、一部の有用な検証を利用するにはEnableDynamicDataメソッドをぜひご活用ください。


