使用查詢字串值來篩選具有模型系結和 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 的方格檢視中,您會新增超連結欄位,以連結至新的 [課程] 頁面。 超連結會包含具有學生識別碼的查詢字串值。
在 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" />
執行應用程式,並注意方格檢視現在包含 Courses 連結。
當您按一下其中一個連結時,您會看到該學生的已註冊課程。
結論
在本教學課程中,您已新增含有查詢字串值的連結。 您已使用該查詢字串值作為 select 方法中的參數值。
在下一個 教學課程中,您會將程式碼從程式碼後置檔案移至商務邏輯層和資料存取層。