原典:Web Forms Model Binding Part 2: Filtering Data (ASP.NET vNext Series)
ASP.NET vNextのブログ投稿シリーズで、今回は4回目になります。
vNextリリースの.NETおよびVisual Studioには、新機能が非常に多く含まれています。ASP.NET vNextでは、WebフォームとMVC、またそのどちらもの基盤となっているASP.NETコアも含め、非常に素晴らしい改善点が多く見られます。
本日の投稿は、Webフォームの新しいモデルバインディングサポートに関する、3つの投稿のうちの2つ目になります。モデルバインディングは、ASP.NET Webフォームにある既存のデータバインディングシステムの拡張で、コードにフォーカスしたデータアクセスの枠組みを提供します。ASP.NET MVCで最初に導入したモデルバインディング概念の大部分を利用し、Webフォームのサーバーコントロールモデルとうまく統合できます。
初回のモデルバインディング投稿では、データを選択する基本事項を説明しました。本日の投稿では、データアクセスに対してコードにフォーカスした方法を取り、ユーザの入力に応じて、選択するデータにフィルターをかける方法を見ていきます。クエリ文字列の入力値とドロップダウンリストの値の両方を使って、このフィルタリングの方法を紹介します。
はじめに
まず、<asp:GridView>コントロールをページに追加し、NorthwindのProductsテーブルからいくつかデータを表示するために、モデルバインディングの構成をします。以下のGridViewでは、SelectMethodプロパティにGetProductsメソッドが設定されています。これにより、コードビハインドファイル内でGetProductsメソッドが呼び出されますが、そこではバインドするProductsを簡単に返すために、Entity Framework コードファーストが使用されています。
<asp:GridView ID="productsGrid" SelectMethod="GetProducts" DataKeyNames="ProductID" AllowPaging="true" AllowSorting="true" AutoGenerateColumns="false" runat="server"> <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 Products : Page { Northwind db = new Northwind(); public IQueryable<Product> GetProducts() { return db.Products; } }
このページを実行すると、予想していた製品データの含まれた表が生成されます。
GetProductsメソッドから、IQueryable<Product>を返しているので、ソートやページングは自動的に行われます(これはデータベースで行われ、必要な10個だけの結果が中間層に返されるので効率的です)。