MySQL 连接器/NET 开发人员指南  / 第 6 章连接器/NET 教程  /  6.4 教程:在实体上使用 LINQ 在 ASP.NET 中进行数据绑定

6.4 教程:在实体上使用 LINQ 在 ASP.NET 中进行数据绑定

在本教程中,您将创建一个 ASP.NET 网页,该网页使用实体框架映射与 MySQL Connector/NET 将 LINQ 查询绑定到实体。

如果您还没有这样做,请在 world尝试本教程之前安装数据库示例。有关下载和安装此数据库的说明,请参阅教程 第 6.3 节“教程:使用实体框架实体作为 Windows 窗体数据源”

创建 ASP.NET 网站

在教程的这一部分,您将创建一个 ASP.NET 网站。该网站使用world数据库。主网页有一个下拉列表,您可以从中选择一个国家/地区。然后,有关该国家/地区城市的数据将显示在 GridView 控件中。

  1. 从 Visual Studio 主菜单中选择文件新建,然后选择网站

  2. 从 Visual Studio 安装的模板中选择 ASP.NET 网站。单击 确定。默认情况下,您将看到网页的源代码视图。

  3. 单击位于源视图面板下方的设计视图选项卡。

  4. 在“设计”视图面板中,输入一些文本来装饰空白网页。

  5. 单击工具箱。从控件列表中,选择DropDownList。将控件拖放到网页文本下方的某个位置。

  6. DropDownList控件上下文菜单中,确保启用 Enable AutoPostBack复选框。这将确保在选择项目时调用控件的事件处理程序。用户的选择将依次用于填充GridView控件。

  7. 从工具箱中选择GridView 控件。将GridView控件拖放到您已放置的下拉列表正下方的位置。

    下图显示了“设计”视图选项卡中装饰文本和两个控件的示例。添加的 GridView 控件生成了一个包含三列(Column0Column1Column3)的网格以及网格每个单元格中的字符串abc

    图 6.18 放置的 GridView 控件

    内容在周围的文字中描述。

  8. 此时建议您保存您的解决方案,并构建解决方案以确保没有错误。

  9. 如果运行该解决方案,您将看到显示了文本和下拉列表,但列表是空的。此外,网格视图根本不会出现。添加此功能将在以下部分中介绍。

在此阶段,您将构建一个网站,但还需要进一步的功能。下一步将是使用实体框架创建从world 数据库到您可以通过编程方式控制的实体的映射。

创建 ADO.NET 实体数据模型

在本教程的这个阶段,您将使用world存储级别的数据库向您的项目添加一个 ADO.NET 实体数据模型。执行此操作的过程在教程 第 6.3 节“教程:使用实体框架实体作为 Windows 窗体数据源”中进行了描述,因此此处不再重复。

使用实体 LINQ 查询的结果填充列表框

在本教程的这一部分中,您将编写代码来填充 DropDownList控件。当网页加载数据以填充列表时,将通过对先前创建的模型使用 LINQ 查询的结果来实现。

  1. 在“设计”视图面板中,双击任何空白区域。这提出了Page_Load方法。

  2. 根据以下清单示例修改相关代码段。

    ...
    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();
            }
        }
    ...

    列表控件只需要在页面首次加载时填充。条件代码可确保如果随后重新加载页面,则不会重新填充列表控件,否则会导致用户选择丢失。

  3. 保存解决方案,构建并运行它。您应该看到列表控件已被填充。您可以选择一个项目,但 GridView 控件尚未出现。

此时,您有一个可用的下拉列表控件,由实体数据模型上的 LINQ 查询填充。

使用实体 LINQ 查询填充网格视图控件

在本教程的最后一部分,您将在实体数据模型上使用 LINQ 查询来填充网格视图控件。

  1. 在设计视图中,双击 DropDownList控件。此操作会导致SelectedIndexChanged显示其代码。当用户选择列表控件中的项目并因此生成 AutoPostBack 事件时调用此方法。

  2. 根据以下清单示例相应地修改代码的相关部分。

    ...
        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 查询结果填充的。

  3. 保存、生成并运行解决方案。当您选择一个国家/地区时,您会看到它的城市显示在 GridView 控件中。下图显示了从列表框中选择的比利时和一个包含三列的表格:NamePopulationCountryCode

    图 6.19 工作网站

    内容在周围的文字中描述。

在本教程中,您了解了如何创建 ASP.NET 网站,还了解了如何在实体数据模型上使用 LINQ 查询来访问 MySQL 数据库。