利用查詢字串值來過濾模型綁定和網頁表單的資料

由 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 主頁的網頁表單,並將該頁面命名 為「課程」。

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 方法中用那個查詢字串值來做參數值。

在下一個 教學中,你會將程式碼從程式碼背後的檔案移到商業邏輯層和資料存取層。