在本教程中,您将创建一个 ASP.NET 网页,该网页使用 Entity Framework 映射与 MySQL Connector/NET 绑定到实体的 LINQ 查询。
如果您尚未这样做,请在尝试本教程之前安装 world
数据库示例。有关下载和安装此数据库的说明,请参阅教程 第 6.3 节,“教程:将 Entity Framework 实体用作 Windows 窗体数据源”。
创建 ASP.NET 网站
在本教程的这一部分中,您将创建一个 ASP.NET 网站。该网站使用 world
数据库。主要网页包含一个下拉列表,您可以从中选择一个国家/地区。然后,该国家/地区的城市信息将显示在 GridView 控件中。
从 Visual Studio 主菜单中选择
、 ,然后选择 。从 Visual Studio 安装的模板中选择 ASP.NET 网站。单击 。默认情况下,您将看到网页的源代码视图。
单击源代码视图面板下方的“设计视图”选项卡。
在“设计视图”面板中,输入一些文本以装饰空白网页。
单击 工具箱。从控件列表中选择 DropDownList。将控件拖放到网页上文本下方的位置。
从 DropDownList 控件的上下文菜单中,确保选中 启用自动回发 复选框。这将确保在选择一项时调用控件的事件处理程序。用户的选择将反过来用于填充 GridView 控件。
从工具箱中选择 GridView 控件。将 GridView 控件拖放到您已经放置的下拉列表正下方的位置。
下图显示了“设计视图”选项卡中装饰文本和两个控件的示例。添加的 GridView 控件生成了一个具有三个列(
Column0
、Column1
和Column3
)的网格,每个单元格中包含字符串abc
。在此处,建议您保存解决方案,并构建解决方案以确保没有错误。
如果您运行解决方案,您将看到文本和下拉列表已显示,但列表为空。此外,网格视图根本没有显示。以下部分将介绍如何添加此功能。
在此阶段,您有一个可以构建的网站,但还需要进一步的功能。下一步将使用 Entity Framework 从 world
数据库创建映射到您可以以编程方式控制的实体。
创建 ADO.NET 实体数据模型
在本教程的这一阶段,您将使用存储层中的 world
数据库向项目添加 ADO.NET 实体数据模型。有关执行此操作的步骤,请参阅教程 第 6.3 节,“教程:将 Entity Framework 实体用作 Windows 窗体数据源”,此处不再重复。
使用 Entity LINQ 查询的结果填充列表框
在本教程的这一部分中,您将编写代码以填充 DropDownList 控件。当网页加载时,使用先前创建的模型上的 LINQ 查询的结果将填充列表数据。
在“设计视图”面板中,双击任何空白区域。这将打开
Page_Load
方法。根据以下示例代码列表修改相关代码段。
... public partial class _Default : System.Web.UI.Page { worldModel.worldEntities we; protected void Page_Load(object sender, EventArgs e) { we = new worldModel.worldEntities(); if (!IsPostBack) { var countryQuery = from c in we.country orderby c.Name select new { c.Code, c.Name }; DropDownList1.DataValueField = "Code"; DropDownList1.DataTextField = "Name"; DropDownList1.DataSource = countryQuery.ToList(); DataBind(); } } ...
列表控件只需要在页面首次加载时填充。条件代码确保如果页面随后重新加载,列表控件不会重新填充,这会导致用户选择丢失。
保存解决方案、构建解决方案并运行解决方案。您应该看到列表控件已填充。您可以选择一项,但目前 GridView 控件不会显示。
在此阶段,您有一个可以正常使用的下拉列表控件,该控件由实体数据模型上的 LINQ 查询填充。
使用 Entity LINQ 查询填充网格视图控件
在本教程的最后一部分中,您将使用实体数据模型上的 LINQ 查询填充网格视图控件。
在“设计视图”中,双击 DropDownList 控件。此操作将显示其
SelectedIndexChanged
代码。当用户在列表控件中选择一项时,将调用此方法,从而生成一个自动回发事件。根据以下示例代码列表相应地修改相关代码段。
... protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { var cityQuery = from c in we.city where c.CountryCode == DropDownList1.SelectedValue orderby c.Name select new { c.Name, c.Population, c.CountryCode }; GridView1.DataSource = cityQuery; DataBind(); } ...
网格视图控件根据实体数据模型上的 LINQ 查询的结果填充。
保存、构建并运行解决方案。当您选择一个国家/地区时,您将看到其城市显示在 GridView 控件中。下图显示了从列表框中选择的比利时,以及包含三列的表格:
Name
、Population
和CountryCode
。
在本教程中,您了解了如何创建一个 ASP.NET 网站,还了解了如何使用实体数据模型上的 LINQ 查询访问 MySQL 数据库。