显示数据库数据表 (C#)

Microsoft

下载 PDF

在本教程中,我演示了显示一组数据库记录的两种方法。 我演示了在 HTML 表中设置一组数据库记录格式的两种方法。 首先,我将介绍如何直接在视图中设置数据库记录的格式。 接下来,我将演示如何在设置数据库记录格式时利用分部。

本教程的目的是说明如何在 ASP.NET MVC 应用程序中显示数据库数据的 HTML 表。 首先,了解如何使用 Visual Studio 中包含的基架工具生成自动显示一组记录的视图。 接下来,你将了解如何在设置数据库记录格式时使用分部作为模板。

创建模型类

我们将显示 Movies 数据库表中的记录集。 Movies 数据库表包含以下列:

列名称 数据类型 允许 Null 值
ID int False
标题 Nvarchar (200) False
导演 NVarchar (50) False
DateReleased DateTime False

为了表示 ASP.NET MVC 应用程序中的 Movies 表,需要创建一个模型类。 在本教程中,我们将使用 Microsoft 实体框架创建模型类。

注意

在本教程中,我们将使用 Microsoft 实体框架。 但是,请务必了解,可以使用各种不同的技术从 ASP.NET MVC 应用程序(包括 LINQ to SQL、NHibernate 或 ADO.NET)与数据库进行交互。

按照以下步骤启动实体数据模型向导:

  1. 右键单击“解决方案资源管理器”窗口中的“模型”文件夹,然后选择菜单选项“添加”、“新建项”。
  2. 选择 “数据 ”类别,然后选择 “ADO.NET 实体数据模型 ”模板。
  3. 为数据模型命名 MoviesDBModel.edmx ,然后单击“ 添加 ”按钮。

单击“添加”按钮后,将显示实体数据模型向导 (请参阅图 1) 。 按照以下步骤完成向导:

  1. “选择模型内容 ”步骤中,选择“ 从数据库生成” 选项。
  2. “选择数据连接” 步骤中,使用 MoviesDB.mdf 数据连接和名称 MoviesDBEntities 进行连接设置。 单击“下一步”按钮。
  3. “选择数据库对象” 步骤中,展开“表”节点,选择“Movies”表。 输入命名空间 “模型 ”,然后单击“ 完成 ”按钮。

创建 LINQ to SQL 类

图 01:创建 LINQ to SQL 类 (单击以查看全尺寸图像)

完成实体数据模型向导后,实体数据模型Designer打开。 Designer应显示 Movies 实体, (请参阅图 2) 。

实体数据模型Designer

图 02:实体数据模型Designer (单击以查看全尺寸图像)

在继续之前,我们需要进行一次更改。 实体数据向导生成一个名为 Movies 的 模型类,该类表示 Movies 数据库表。 由于我们将使用 Movies 类来表示特定电影,因此我们需要将类的名称修改为 Movie 而不是 Movies (单数而不是复数) 。

双击设计器图面上的类的名称,并将类的名称从“电影”更改为“电影”。 进行此更改后,单击“ 保存 ”按钮 (软盘) 图标以生成 Movie 类。

创建电影控制器

现在,我们已经有了表示数据库记录的方法,我们可以创建一个返回电影集合的控制器。 在 Visual Studio 解决方案资源管理器 窗口中,右键单击 Controllers 文件夹并选择菜单选项“添加”,控制器 (请参阅图 3) 。

“添加控制器”菜单

图 03:“添加控制器”菜单 (单击以查看全尺寸图像)

出现“ 添加控制器 ”对话框时,输入控制器名称 MovieController (请参阅图 4) 。 单击“ 添加” 按钮添加新控制器。

“添加控制器”对话框

图 04:“添加控制器”对话框 (单击以查看全尺寸图像)

我们需要修改 Movie 控制器公开的 Index () 操作,以便它返回数据库记录集。 修改控制器,使其看起来像清单 1 中的控制器。

列表 1 - Controllers\MovieController.cs

using System.Linq;

using System.Web.Mvc;

using MvcApplication1.Models; 

namespace MvcApplication1.Controllers

{

    public class MovieController : Controller

    {

        //

        // GET: /Movie/ 

        public ActionResult Index()

        {

            var entities = new MoviesDBEntities();

            return View(entities.MovieSet.ToList());

        } 

    }

}

在清单 1 中,MoviesDBEntities 类用于表示 MoviesDB 数据库。 若要使用此类,需要导入 MvcApplication1.Models 命名空间,如下所示:

using MvcApplication1.Models;

表达式 实体。MovieSet.ToList () 从 Movies 数据库表返回所有电影的集合。

创建视图

在 HTML 表中显示一组数据库记录的最简单方法是利用 Visual Studio 提供的基架。

通过选择菜单选项“ 生成”、“生成解决方案”来生成应用程序。 必须先生成应用程序,然后才能打开“ 添加视图 ”对话框,否则数据类不会显示在对话框中。

右键单击 Index () 操作,然后选择菜单选项 “添加视图 ” (请参阅图 5) 。

添加视图

图 05:添加视图 (单击以查看全尺寸图像)

在“添加视图”对话框中,检查标记为“创建强类型视图”的复选框。 选择 Movie 类作为 视图数据类。 选择“ 列表 ”作为 视图内容 (请参阅图 6) 。 选择这些选项将生成显示电影列表的强类型视图。

“添加视图”对话框

图 06:“添加视图”对话框 (单击以查看全尺寸图像)

单击“ 添加” 按钮后,将自动生成清单 2 中的视图。 此视图包含循环访问电影集合并显示电影的每个属性所需的代码。

列表 2 - Views\Movie\Index.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.Movie>>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

      Index

</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Index</h2> 

    <table>

        <tr>

            <th></th>

            <th>

                Id

            </th>

            <th>

                Title

            </th>

            <th>

                Director

            </th>

            <th>

                DateReleased

            </th>

        </tr> 

    <% foreach (var item in Model) { %>

        <tr>

            <td>

                <%= Html.ActionLink("Edit", "Edit", new { id=item.Id }) %> |

                <%= Html.ActionLink("Details", "Details", new { id=item.Id })%>

            </td>

            <td>

                <%= Html.Encode(item.Id) %>

            </td>

            <td>

                <%= Html.Encode(item.Title) %>

            </td>

            <td>

                <%= Html.Encode(item.Director) %>

            </td>

            <td>

                <%= Html.Encode(String.Format("{0:g}", item.DateReleased)) %>

            </td>

        </tr>

    <% } %> 

    </table> 

    <p>

        <%= Html.ActionLink("Create New", "Create") %>

    </p> 

</asp:Content>

可以通过选择菜单选项 “调试”、“开始调试 (或按 F5 键) 来运行应用程序。 运行应用程序会启动 Internet Explorer。 如果导航到 /Movie URL,则会看到图 7 中的页面。

电影表

图 07:电影表 (单击以查看全尺寸图像)

如果不喜欢图 7 中有关数据库记录网格外观的任何内容,则只需修改“索引”视图即可。 例如,可以通过修改“索引”视图,将 DateReleased 标头更改为 “发布日期 ”。

创建包含分部的模板

当视图变得过于复杂时,最好开始将视图分解为分部。 使用分部可让你的视图更易于理解和维护。 我们将创建一个部分,我们可以将其用作模板来设置每个电影数据库记录的格式。

按照以下步骤创建部分:

  1. 右键单击 Views\Movie 文件夹,然后选择菜单选项 “添加视图”。
  2. 选中标记为创建 分部视图 (.ascx) 复选框。
  3. 将部分 MovieTemplate 命名为 。
  4. 选中标记为 “创建强类型视图”的复选框。
  5. 选择“Movie”作为 视图数据类
  6. 选择“空”作为 视图内容
  7. 单击“ 添加 ”按钮,将部分添加到项目。

完成这些步骤后,将 MovieTemplate 部分修改为列表 3。

列表 3 – Views\Movie\MovieTemplate.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication1.Models.Movie>" %> 

<tr>

    <td>

        <%= Html.Encode(Model.Id) %>

    </td>

    <td>

        <%= Html.Encode(Model.Title) %>

    </td>

    <td>

        <%= Html.Encode(Model.Director) %>

    </td>

    <td>

        <%= Html.Encode(String.Format("{0:g}", Model.DateReleased)) %>

    </td>

</tr>

清单 3 中的部分包含单行记录的模板。

列表 4 中修改后的索引视图使用 MovieTemplate 部分。

列表 4 - Views\Movie\Index.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.Movie>>" %> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Index</h2> 

    <table>

        <tr>

            <th>

                Id

            </th>

            <th>

                Title

            </th>

            <th>

                Director

            </th>

            <th>

                DateReleased

            </th>

        </tr> 

    <% foreach (var item in Model) { %>

        <% Html.RenderPartial("MovieTemplate", item); %>

    <% } %> 

    </table> 

</asp:Content>

列表 4 中的视图包含一个循环访问所有电影的 foreach 循环。 对于每个电影,MovieTemplate 部分用于设置电影的格式。 通过调用 RenderPartial () 帮助程序方法呈现 MovieTemplate。

修改后的索引视图呈现完全相同的数据库记录 HTML 表。 但是,视图已大大简化。

RenderPartial () 方法不同于大多数其他帮助程序方法,因为它不返回字符串。 因此,您必须使用 <% Html.RenderPartial () ; %> 而不是 <%= Html.RenderPartial () ; %>调用 RenderPartial () 方法。

总结

本教程的目的是说明如何在 HTML 表中显示一组数据库记录。 首先,你了解了如何利用 Microsoft 实体框架从控制器操作返回一组数据库记录。 接下来,你学习了如何使用 Visual Studio 基架生成可自动显示项集合的视图。 最后,你了解了如何利用分部来简化视图。 你已了解如何使用分部作为模板,以便设置每个数据库记录的格式。