从控制器访问模型的数据

作者 :Scott Hanselman

这是一个初学者教程,介绍 ASP.NET MVC 的基础知识。 你将创建一个简单的 Web 应用程序,用于从数据库读取和写入。 请访问 ASP.NET MVC 学习中心 ,查找其他 ASP.NET MVC 教程和示例。

在本部分中,我们将创建一个新的 MoviesController 类,并编写一些代码来检索 Movie 数据,并使用视图模板将其显示回浏览器。

右键单击 Controllers 文件夹,然后新建 MoviesController。

添加控制器

这将在项目中的 \Controllers 文件夹下创建新的“MoviesController.cs”文件。 让我们更新 MovieController,以从新填充的数据库中检索电影列表。

using System;
using System.Linq;
using System.Web.Mvc;
using Movies.Models;

namespace Movies.Controllers
{
    public class MoviesController : Controller
    {
        MoviesEntities db = new MoviesEntities();

        public ActionResult Index()
        {
            var movies = from m in db.Movies
                         where m.ReleaseDate > new DateTime(1984, 6, 1)
                         select m;

            return View(movies.ToList());

        }
    }
}

我们正在执行 LINQ 查询,以便仅检索 1984 年夏季之后上映的电影。 我们需要一个视图模板来呈现此电影列表,因此右键单击 方法并选择“添加视图”来创建它。

在“添加视图”对话框中,我们将指示将 List<Movies.Models.Movie> 传递给视图模板。 与之前使用“添加视图”对话框并选择创建“空”模板不同,这次我们将指示我们希望 Visual Studio 使用一些默认内容自动“搭建”视图模板。 为此,我们将在“查看内容”下拉菜单中选择“列表”项。

请记住,创建一个新类时,需要编译应用程序,使其显示在“添加视图”对话框中。

添加视图

单击“添加”,系统将自动为显示电影列表的视图生成代码。 这是将 h2> 标题更改为<类似“我的电影列表”的好时机,就像我们之前对Hello World视图所做的那样。

电影 - Microsoft Visual Web Developer 2010 Express

运行应用程序并访问地址栏中的 /Movies。 现在,我们已使用控制器内的基本查询从数据库中检索数据,并将数据返回到了解电影的视图。 然后,该视图会旋转电影列表,并为我们创建数据表。

Internet Explorer 浏览器窗口的屏幕截图,其中显示了列表中的“我的电影列表”,其中包含 Ghostbusters 2 和 Ghostbusters 3。

我们不会对此应用程序实现“编辑”、“详细信息”和“删除”功能,因此不需要基架模板为我们创建的默认链接。 打开 /Movies/Index.aspx 文件并将其删除。

下面是更新后的视图模板在进行这些更改后的外观的源代码:

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

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Movie List
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>My Movie List</h2>
    <table>
        <tr>
            <th>Title</th>
            <th>ReleaseDate</th>
            <th>Genre</th>
            <th>Rating</th>
            <th>Price</th>
        </tr>
        <% foreach (var item in Model)
           { %>
        <tr>
            <td><%: item.Title %></td>
            <td><%: String.Format("{0:g}", item.ReleaseDate) %></td>
            <td><%: item.Genre %></td>
            <td><%: item.Rating %></td>
            <td><%: String.Format("{0:F}", item.Price) %></td>
        </tr>
        <% } %>
    </table>
    <p>
        <%: Html.ActionLink("Create New", "Create") %>
    </p>
</asp:Content>

它创建我们不需要的链接,因此对于此示例,我们将删除这些链接。 不过,我们将保留“新建”链接,这是下一步! 下面是删除该列后应用的外观。

Internet Explorer 浏览器窗口的屏幕截图,其中显示了“我的电影列表”,其中删除了“编辑”、“详细信息”和“删除”链接。

我们现在有一个简单的电影数据列表。 但是,如果单击“新建”链接,将收到错误,因为它未连接! 让我们实现一个 Create Action 方法,并使用户能够在数据库中输入新电影。