CodeZine(コードジン)

特集ページ一覧

ASP.NET Dynamic Dataのフィールドテンプレートのカスタマイズと検証機能

ASP.NET Dynamic Data活用編(3)

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2011/01/18 14:00
目次

検証のカスタマイズ

 Dynamic Dataにおいて検証は第1回でも触れたように属性クラスを使用して実施します。本項は、多少複雑な検証を実施したい時に必要な属性クラスの活用並びにカスタマイズを紹介します。Dynamic Dataで利用できる属性一覧並びに基本的な使用方法については第1回を参照ください。

CustomValidation属性を使用した検証のカスタマイズ

 CustomValidation属性は、通常の属性では検証できない複雑な検証を実施したい時に検証メソッドを作成し、それを属性として使用できる特殊な属性クラスです。記載例は次のようになります。

CustomValidation属性の記載例
[CustomValidation(typeof(カスタム検証メソッドを持つクラス), "カスタム検証メソッド名")]

 検証メソッドは下記のように記載します。ここは検証部分なので利用者が検証したい内容を自由に書けます。

MetaNorthWind.csの一部
using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace CodeZine3_2
{
    // モデルクラスに関連付けるメタデータクラスの指定
    [MetadataType(typeof(MetaNorthWind))]
    public partial class Employees
    { 
    }

    // FamilyAnnotationエンティティ型のプロパティを記載
    public class MetaNorthWind
    {
        [DisplayName("敬称")]
        [CustomValidation(typeof(MetaNorthWind), "CheckTitle")]
        public String TitleOfCourtesy { get; set; }

	// カスタム検証メソッド
        public static ValidationResult CheckTitle(string TitleOfCourtesy, ValidationContext vCont)
        {
            if (TitleOfCourtesy == null || TitleOfCourtesy.Length > 10)
            {
                return new ValidationResult("10文字以内で入力してください。");
            }
            else if (TitleOfCourtesy == "ジニアス")
            {
                return new ValidationResult("ジニアスは使用できません。");
            }
            return ValidationResult.Success;
        } 
    }
}

 カスタム検証メソッドはstaticのメソッドで記載します。戻り値は検証結果を格納するため、ValidationResultオブジェクトとなります。パラメータはリクエスト時の検証したい値です。CheckTitleメソッドでは、TitleOfCourtesyプロパティの値を元に入力制限と、ジニアスという値が使用されているかどうかを検証しています。"ジニアス"という文字以外で10文字以内の値が格納された時に検証を通過します(図4~5)。

図4 カスタム検証メソッドの動作確認
図4 カスタム検証メソッドの動作確認
図5 検証通過すると無事データが反映される
図5 検証通過すると無事データが反映される

 以上がCustomValidation属性を使用したカスタム検証メソッドの作成方法です。

 恐らくこのカスタム属性を使えばDynamic Data内の検証のカスタマイズはほとんど網羅できるでしょう。凝ったカスタマイズもできる反面それを突き詰めすぎるとDynamic Dataのうま味である「お手軽に動的データアプリができる」という部分を損なう可能性があるので利用時の線引きはしっかりと行いましょう。

カスタムの検証属性の作成方法

 CustomValidation属性を活用すれば大抵の検証は実装できます。しかし、さまざまな場所で同様の検証を行いたい場合は、カスタムの検証属性クラスを作成し一元化することが保守面などから見ても効果的です。DataAnnotationが提供する検証属性クラスはValidationAttributeクラスをベースとして作られています。このValidationAttributeクラスを継承し、必要な記載を追加することで、簡単にカスタム検証属性が作成できます。このカスタム検証属性の作成方法はMVC 2の検証記事にて記載しているのでそちらを参照ください。

 なお、前述のとおり、様々な場所で同様の検証を行いたい時には効果的ですが、そうでない場合はCustomValidation属性を使用した検証を活用しましょう。

まとめ

 今回はDynamic Dataを簡単にカスタマイズするために着手しやすいデータフィールドのカスタマイズと属性クラスの活用ならびにカスタマイズについてご紹介しました。見た目並びに動作部分と、検証の仕組みを知ることで工数を削減しつつ、より動的データアプリを作成しやすくなるので、Dynamic Dataを活用する際は本稿の内容をベースに幅を広げていただければと思います。次回はDynamic Dataの活用連載も最終回なので、フィルタリングのカスタマイズと、エンティティテンプレートの活用方法について紹介する予定です。お楽しみに。

参考文献



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:ASP.NET Dynamic Data活用編

著者プロフィール

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

  • WINGSプロジェクト ナオキ(ナオキ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5