使用查詢字串值來篩選具有模型系結和 Web 表單的資料

作者:Tom FitzMacken

本教學課程系列示範搭配 ASP.NET Web Forms專案使用模型系結的基本層面。 模型系結讓資料互動比處理資料來源物件更直接, (例如 ObjectDataSource 或 SqlDataSource) 。 本系列從簡介內容開始,並移至稍後教學課程中的更進階概念。

本教學課程示範如何在查詢字串中傳遞值,並使用該值透過模型系結擷取資料。

本教學課程是以系列 先前 部分建立的專案為基礎。

您可以在 C# 或 VB 中 下載 完整的專案。 可下載的程式碼適用于 Visual Studio 2012 或 Visual Studio 2013。 它會使用 Visual Studio 2012 範本,這與本教學課程中顯示的Visual Studio 2013範本稍有不同。

您將建置什麼

在本教學課程中,您將會:

  1. 新增頁面以顯示學生已註冊的課程
  2. 根據查詢字串中的值,擷取所選學生的已註冊課程
  3. 將具有查詢字串值的超連結從方格檢視新增至新頁面

本教學課程中的步驟 與您在先前 的教學課程中執行的步驟相當類似,可根據下拉式清單中的使用者選取專案來篩選顯示的學生。 在該教學課程中,您已使用 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 方法中的參數值。

在下一個 教學課程中,您會將程式碼從程式碼後置檔案移至商務邏輯層和資料存取層。