SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ASP.NET Dynamic Data活用編

ASP.NET Dynamic Dataを既存のアプリケーションへ組み込もう

ASP.NET Dynamic Data活用編(2)

  • X ポスト
  • このエントリーをはてなブックマークに追加

WebFormで簡単にDynamic Data化を実施する

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

図1 EnableDynamicDataメソッドを適用したGridView
図1 EnableDynamicDataメソッドを適用したGridView
図2 GridViewの編集画面で表示される検証機能
図2 GridViewの編集画面で表示される検証機能
図3 DetailsViewの新規作成画面で表示される検証機能
図3 DetailsViewの新規作成画面で表示される検証機能

 まずは、各種データサーバーコントロールに適用するData Annotationの検証を記載します。コードベースで入力検証を行うために、Entity Data Modelのメタデータを記載するパーシャルクラスを作成します。なお、本サンプルではシンプルに見せるため、家族情報を入力するテーブルとEntity Data Modelを使用しています。

Data Annotationによる属性宣言(NaokisFamily.csファイル)
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属性は入力文字制限をそれぞれ指定しています。続いて、このパーシャルクラスによる検証を実施するデータサーバーコントロールなどの記載は以下のとおりです。

EnableDynamicDataメソッドを反映させるためのHTMLビュー設定(Default.aspxファイル)
<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メソッドの使用方法です。

EnableDynamicDataメソッドの記載例(Default.aspxファイル)
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メソッドをぜひご活用ください。

次のページ
既存ソリューションへの組み込み方法

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ASP.NET Dynamic Data活用編連載記事一覧

もっと読む

この記事の著者

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

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5649 2011/01/11 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング