由 Tom FitzMacken 撰寫
本教學系列示範在 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 主頁的網頁表單,並將該頁面命名 為「課程」。
在 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>
定義選擇方法
在 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" />
執行應用程式時,會發現格子視圖現在包含了課程連結。
點擊其中一個連結後,你會看到該學生已註冊的課程。
結論
在這個教學中,你新增了一個帶有查詢字串值的連結。 你在 select 方法中用那個查詢字串值來做參數值。
在下一個 教學中,你會將程式碼從程式碼背後的檔案移到商業邏輯層和資料存取層。