クエリ文字列値を使用してモデル バインドと Web フォームを使用してデータをフィルター処理する
このチュートリアル シリーズでは、ASP.NET Web Forms プロジェクトでモデル バインドを使用する基本的な側面について説明します。 モデル バインドを使用すると、データ ソース オブジェクト (ObjectDataSource や SqlDataSource など) を処理するよりも、データの操作が簡単になります。 このシリーズは入門資料から始まり、後のチュートリアルでより高度な概念に移ります。
このチュートリアルでは、クエリ文字列に値を渡し、その値を使用してモデル バインドを使用してデータを取得する方法について説明します。
このチュートリアルは、シリーズの 前 の部分で作成されたプロジェクトに基づいています。
完全なプロジェクトは C# または VB で ダウンロード できます。 ダウンロード可能なコードは、Visual Studio 2012 または Visual Studio 2013で動作します。 Visual Studio 2012 テンプレートを使用します。これは、このチュートリアルで示すVisual Studio 2013 テンプレートとは若干異なります。
作成する内容
このチュートリアルでは、次のことについて説明します。
- 学生の登録済みコースを表示する新しいページを追加する
- クエリ文字列の値に基づいて、選択した学生の登録済みコースを取得します
- グリッド ビューから新しいページにクエリ文字列値を含むハイパーリンクを追加する
このチュートリアルの手順は、ドロップダウン リストのユーザー選択に基づいて表示される学生をフィルター処理するために、前の チュートリアル で行った手順とよく似ています。 このチュートリアルでは、select メソッドの Control 属性を使用して、パラメーター値がコントロールから取得されることを指定しました。 このチュートリアルでは、select メソッドの QueryString 属性を使用して、パラメーター値がクエリ文字列から取得されることを指定します。
学生のコースを表示するための新しいページを追加する
Site.master マスター ページを使用する新しい Web フォームを追加し、ページに Courses という名前を付けます。
Courses.aspx ファイルで、グリッド ビューを追加して、選択した学生のコースを表示します。
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<asp:GridView runat="server" ID="coursesGrid"
ItemType="ContosoUniversityModelBinding.Models.Enrollment"
SelectMethod="coursesGrid_GetData" AutoGenerateColumns="false">
<Columns>
<asp:BoundField HeaderText="Title" DataField="Course.Title" />
<asp:BoundField HeaderText="Credits" DataField="Course.Credits" />
<asp:BoundField HeaderText="Grade" DataField="Grade" />
</Columns>
<EmptyDataTemplate>
<asp:Label Text="No Enrolled Courses" runat="server" />
</EmptyDataTemplate>
</asp:GridView>
</asp:Content>
select メソッドを定義する
Courses.aspx.cs では、グリッド ビューの SelectMethod プロパティで指定した名前の select メソッドを追加します。 このメソッドでは、学生のコースを取得するためのクエリを定義し、パラメーターが パラメーターと同じ名前のクエリ文字列値から取得されるように指定します。
まず、次の using ステートメントを追加する必要があります。
using ContosoUniversityModelBinding.Models;
using System.Web.ModelBinding;
using System.Data.Entity;
次に、Courses.aspx.cs に次のコードを追加します。
public IQueryable<Enrollment> coursesGrid_GetData([QueryString] int? studentID)
{
SchoolContext db = new SchoolContext();
var query = db.Enrollments.Include(e => e.Course)
.Where(e => e.StudentID == studentID);
return query;
}
QueryString 属性は、StudentID という名前のクエリ文字列値がこのメソッドの パラメーターに自動的に割り当てられることを意味します。
クエリ文字列値を含むハイパーリンクを追加する
Students.aspx のグリッド ビューで、新しいコース ページにリンクするハイパーリンク フィールドを追加します。 ハイパーリンクには、学生の ID を含むクエリ文字列値が含まれます。
Students.aspx で、[合計クレジット] フィールドのすぐ下のグリッド ビュー列に次のフィールドを追加します。
<asp:TemplateField HeaderText="Total Credits">
<ItemTemplate>
<asp:Label Text="<%# Item.Enrollments.Sum(en => en.Course.Credits) %>"
runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:HyperLinkField Text="Courses" DataNavigateUrlFormatString="~/Courses.aspx?StudentID={0}"
DataNavigateUrlFields="StudentID" />
アプリケーションを実行し、グリッド ビューに [コース] リンクが含まれていることに注意してください。
リンクの 1 つをクリックすると、その学生の登録済みコースが表示されます。
まとめ
このチュートリアルでは、クエリ文字列値を含むリンクを追加しました。 select メソッドのパラメーター値に対して、そのクエリ文字列値を使用しました。
次の チュートリアルでは、分離コード ファイルからビジネス ロジック レイヤーとデータ アクセス層にコードを移動します。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示