原典: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です。