在本教程中,您将创建一个 ASP.NET 网页,该网页使用实体框架映射与 MySQL Connector/NET 将 LINQ 查询绑定到实体。
如果您还没有这样做,请在
world
尝试本教程之前安装数据库示例。有关下载和安装此数据库的说明,请参阅教程
第 6.3 节“教程:使用实体框架实体作为 Windows 窗体数据源”
。
创建 ASP.NET 网站
在教程的这一部分,您将创建一个 ASP.NET 网站。该网站使用world
数据库。主网页有一个下拉列表,您可以从中选择一个国家/地区。然后,有关该国家/地区城市的数据将显示在 GridView 控件中。
从 Visual Studio 主菜单中选择文件、 新建,然后选择网站。
从 Visual Studio 安装的模板中选择 ASP.NET 网站。单击 确定。默认情况下,您将看到网页的源代码视图。
单击位于源视图面板下方的设计视图选项卡。
在“设计”视图面板中,输入一些文本来装饰空白网页。
单击工具箱。从控件列表中,选择DropDownList。将控件拖放到网页文本下方的某个位置。
从DropDownList控件上下文菜单中,确保启用 Enable AutoPostBack复选框。这将确保在选择项目时调用控件的事件处理程序。用户的选择将依次用于填充GridView控件。
从工具箱中选择GridView 控件。将GridView控件拖放到您已放置的下拉列表正下方的位置。
下图显示了“设计”视图选项卡中装饰文本和两个控件的示例。添加的 GridView 控件生成了一个包含三列(
Column0
、Column1
和Column3
)的网格以及网格每个单元格中的字符串abc
。此时建议您保存您的解决方案,并构建解决方案以确保没有错误。
如果运行该解决方案,您将看到显示了文本和下拉列表,但列表是空的。此外,网格视图根本不会出现。添加此功能将在以下部分中介绍。
在此阶段,您将构建一个网站,但还需要进一步的功能。下一步将是使用实体框架创建从world
数据库到您可以通过编程方式控制的实体的映射。
创建 ADO.NET 实体数据模型
在本教程的这个阶段,您将使用world
存储级别的数据库向您的项目添加一个 ADO.NET 实体数据模型。执行此操作的过程在教程
第 6.3 节“教程:使用实体框架实体作为 Windows 窗体数据源”中进行了描述,因此此处不再重复。
使用实体 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 查询填充。
使用实体 LINQ 查询填充网格视图控件
在本教程的最后一部分,您将在实体数据模型上使用 LINQ 查询来填充网格视图控件。
在设计视图中,双击 DropDownList控件。此操作会导致
SelectedIndexChanged
显示其代码。当用户选择列表控件中的项目并因此生成 AutoPostBack 事件时调用此方法。根据以下清单示例相应地修改代码的相关部分。
... 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 数据库。