通过


使用查询字符串值通过模型绑定和 Web 窗体筛选数据

作者: Tom FitzMacken

本教程系列演示了将模型绑定与 ASP.NET Web 窗体项目配合使用的基本方面。 模型绑定使数据交互比处理数据源对象(如 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.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" />

运行应用程序并注意到网格视图现在包括“课程”链接。

添加超链接

单击其中一个链接时,你将看到该学生的已注册课程。

显示课程

结束语

在本教程中,你添加了包含查询字符串值的链接。 在 select 方法中使用了该查询字符串值作为参数值。

在下一 教程中,你将代码从代码隐藏文件移动到业务逻辑层和数据访问层。