作者: Tom FitzMacken
本教程系列演示了将模型绑定与 ASP.NET Web 窗体项目配合使用的基本方面。 模型绑定使数据交互比处理数据源对象(如 ObjectDataSource 或 SqlDataSource)更加简单直接。 本系列从介绍性材料开始,并在后续教程中转到更高级的概念。
本教程演示如何在查询字符串中传递值,并使用该值通过模型绑定检索数据。
本教程基于在该系列较早部分创建的项目。
可以在 C# 或 VB 中 下载 完整的项目。 可下载的代码适用于 Visual Studio 2012 或 Visual Studio 2013。 它使用 Visual Studio 2012 模板,与本教程中显示的 Visual Studio 2013 模板略有不同。
您将构建的内容
在本教程中,你将:
- 添加新页面以显示学生注册的课程
- 根据查询字符串中的值检索所选学生的已注册课程
- 将包含查询字符串值的超链接从网格视图添加到新页面
本教程中的步骤与在前面的 教程 中执行的操作相当类似,根据下拉列表中的用户选择筛选显示的学生。 在本教程中,你使用了 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 方法中使用了该查询字符串值作为参数值。
在下一 教程中,你将代码从代码隐藏文件移动到业务逻辑层和数据访问层。