Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

強く型付けされたデータコントロール (ASP.NET vNextシリーズ)

連載:ScottGu's Blog翻訳

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

 本稿は、Scott Guthrie氏のブログを、氏の許可を得て、翻訳、転載したものです。米Microsoft社の副社長で、ASP.NETやSilverlightの開発チームを統率する氏のブログでは、次期製品を含む最新の技術をいち早く紹介しています。

 原典:Strongly Typed Data Controls (ASP.NET vNext Series)

強く型付けされたデータコントロール (ASP.NET vNextシリーズ)

 これは、ASP.NET vNextブログ投稿シリーズの第2回目です。

 vNextリリースの.NETおよびVisual Studioには、新機能が非常に多く含まれています。ASP.NET vNextでは、WebフォームとMVC、またそのどちらもの基盤となっているASP.NETコアも含め、非常に素晴らしい改善点が多く見られます。

 Webフォームでの改善点について今後いくつか投稿していくのですが、本日の投稿はその1回目になります。今回は、強く型付けされたデータコントロールで導入する、新しいサポートについてカバーします。

データコントロールテンプレートの背景

 ASP.NET Webフォームは、かなり初期のリリースから”テンプレート”という概念を導入してきました。テンプレートでは、サーバーコントロールで作成されたタグをカスタマイズ(またはオーバーライド)でき、通常はデータバインディング式と一緒に使用します。

 現在テンプレート内でデータバインディングを使うと、データをバインドするのに遅延バインディング式を使用します。例えば、以下では、リピーターコントロールにデータバインディングされたオブジェクトの一覧から、”名前”や”名字”のプロパティをバインドするために、Evalヘルパーメソッドを使用します。

<ul>
    <asp:Repeater runat="server" ID="customers">
        <ItemTemplate>
            <li>
                First Name: <%# Eval("FirstName") %><br />
                Last Name: <%# Eval("LastName") %><br />
            </li>
        </ItemTemplate>
    </asp:Repeater>
</ul>

 双方向でデータバインディングする場合、Bindヘルパーメソッドを使用します。

<asp:FormView ID="editCustomer" runat="server" >
    <EditItemTemplate>
        <div>
            First Name:
            <asp:TextBox ID="firstName" runat="server" Text='<%# Bind("FirstName") %>' />
        </div>
        <div>
            Last Name:
            <asp:TextBox ID="lastName" runat="server" Text='<%# Bind("LastName") %>' />
        </div>
        <asp:Button runat="server" CommandName="Update" />
    </EditItemTemplate>
</asp:FormView>

 上記方法のマイナス面は、EvalやBindメソッドへの呼び出しは遅延バインディングになり、プロパティ名を表す文字列を引き渡すのです。つまり、メンバー名のIntellisenseも、コードナビゲーション(定義へ移動など)のサポートも、コンパイル時のチェックサポートも得られません。

強く型付けされたデータコントロール

 次期リリースのASP.NETでは、強く型付けされたデータテンプレートを有効化できるようになります。具体的には、コントロールがバインドするデータ型を宣言できるように、データコントロール上に新しい“ModelType”プロパティを加えました。このプロパティを設定すると、ItemおよびBindItemという、2つの新しい型の変数が、データバインディングされるテンプレート式の範囲に生成されます。

 開発者は、これらの変数をデータバインディング式で使用すると、フルのIntellisenseとコンパイル時のチェックサポートが得られます。例えば、以下では、<asp:repeater>コントロール上のModelTypeに、”Customer”オブジェクトを設定しています。一度これを行うと、プロパティを参照するのに、Eval(“FirstName”)の使用を、Item.FirstNameに切り替えられます。

 そうすると、Visual StudioのフルコードIntellisenseが得られます。

 双方向のデータバインディング式には、BindItem変数も使用でき、同じ強く型付けされた利点が得られます。

<asp:FormView ID="editCustomer" runat="server">
    <EditItemTemplate>
        <div>
            First Name:
            <asp:TextBox ID="firstName" Text='<%# BindItem.FirstName %>' runat="server" />
        </div>
        <div>
            Last Name:
            <asp:TextBox ID="lastName" Text='<%# BindItem.LastName %>' runat="server" />
        </div>
        <asp:Button runat="server" CommandName="Update" />
    </EditItemTemplate>
</asp:FormView>

 入力時に間違えると、Intellisenseエンジンが間違いだというフィードバックを表示します。

機能のQuick Video

 Damian Edwards氏は、強く型付けされたデータコントロールを使用した実際の動きを、90秒ビデオで公開しています。それは、ここから見れます。

まとめ

 強く型付けされたデータコントロールのサポートは、より簡単でクリーンなデータバインディング式を可能にする、小さいけれど素晴らしい機能です。データバインディングやデータ編集がさらに強力で簡単になるように、ASP.NETのWebフォームに行われた重要な改善点についても、今後の投稿でカバーしていきます。

 Hope this helps,

 Scott

 P.S. ブログ以外に、Twitterを使って簡単な更新やリンク共有を行っています。私のハンドル名は、@scottguです。



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

著者プロフィール

  • WINGSプロジェクト Chica(チカ)

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

バックナンバー

連載:Scott Guthrie氏 Blog翻訳

もっと読む

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