原典:Web Forms Model Binding Part 3: Updating and Validation (ASP.NET 4.5 Series)
ASP.NET 4.5のブログ投稿シリーズで、今回は5回目になります。
次期リリースの.NETおよびVisual Studioには、新機能が非常に多く含まれています。ASP.NET 4.5では、WebフォームとMVC、またそのどちらもの基盤となっているASP.NETコアも含め、非常に素晴らしい改善点が多く見られます。
Webフォームの新しいモデルバインディングサポートについてのシリーズで、本日の投稿は3回目になります。モデルバインディングは、ASP.NET Webフォームにある既存のデータバインディングシステムの拡張で、コードにフォーカスしたデータアクセスの枠組みを提供します。ASP.NET MVCで最初に導入したモデルバインディング概念の大部分を利用し、Webフォームのサーバーコントロールモデルとうまく統合できます。
このモデルバインディングシリーズの最初の2つについては、Webフォームモデルバインディング パート1:データの選択、ユーザーの入力に応じたデータのフィルタリングから参照できます。
本日の投稿では、データ更新時におけるモデルバインディングの改善点を見ていきます。
はじめに
前回の投稿で、NorthwindのProductsテーブルにあるデータを表示させるために、モデルバインディングを構成しましたが、そのGridViewのサンプルから始めましょう。GridViewは、構成されたGetProductsメソッドを呼び出します。それは、Entity Framework コードファーストを使用しているため、Northwindデータのコンテキストインスタンス上のProductsプロパティを簡単に返します。
DataKeyNamesプロパティに、モデルタイプのプライマリキー(もしくはキー)を設定することが重要です。これにより、GridViewがブラウザとサーバー間でこの値をやりとりできるからです。
<asp:GridView ID="productsGrid" runat="server" DataKeyNames="ProductID" ModelType="ModelBindingPart3.Product" AllowPaging="true" AllowSorting="true" AutoGenerateColumns="false" SelectMethod="GetProducts"> <Columns> <asp:BoundField DataField="ProductID" HeaderText="ID" /> <asp:BoundField DataField="ProductName" HeaderText="Name" SortExpression="ProductName" /> <asp:BoundField DataField="UnitPrice" HeaderText="Unit Price" SortExpression="UnitPrice" /> <asp:BoundField DataField="UnitsInStock" HeaderText="# in Stock" SortExpression="UnitsInStock" /> </Columns> </asp:GridView>
以下は、コードビハインドファイルの様子です(GetProductsメソッドが含まれています)。
public partial class _Default : Page { private Northwind _db = new Northwind(); public IQueryable<Product> GetProducts() { return _db.Products; } }
このページを実行すると、予想していた製品データの含まれた表が生成されます。
GetProductsメソッドはIQueryable<Product>を返すので、ユーザーは簡単にGridView内でデータのページングやソートが行えます。ページ上では、10行のみがデータベースから返されます。