学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据

学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据

在本章中,我们将新建一个MoviesController 控制器,并编写获取电影数据的代码,使用视图模板将数据展示在浏览器中。

在进行下一步之前,你需要先编译应用程序,否则在添加控制器的时候会出错。

在解决方法资源管理器的Controllers文件夹右键,选择"添加">"新建搭建基架项":

在“添加支架”对话框,选择 包含视图的MVC 5控制器(使用 En),然后单击“添加”按钮。

在控制器名字输入框中输入 MoviesController。在模型类选择列表中,选择 Movie (MvcMovie.Models)。在数据上下类选择列表中,选择 MovieDBContext(MvcMovie.Models) 。

在点击“添加”按钮之后vs会创建如下文件和文件夹:

· 在Controllers 文件夹中创建了MoviesController.cs 文件

· 在Views 文件夹中创建了Movies 文件夹

· 在Views\Movies 文件夹中创建了Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml, 和 Index.cshtml  视图文件。

ASP.NET MVC 5 自动创建了CRUD(create, read, update, delete)操作方法,并为他们创建好了视图。

你现在已经有了一个拥有完整功能的应用程序,你可以使用它来创建、列表显示、编辑和删除电影了。

运行应用程序,在浏览器中查看地址 http://localhost:xxxxx/Movies 。因为程序依赖默认的路由,所以浏览器请求的地址分配给 MoviesController的 Index 方法。

换句话说,浏览器请求http://localhost:xxxxx/Movies 地址等同于请求http://localhost:xxxxx/Movies/Index 地址。浏览器中显示一个空的电影列表,因为我们目前还没有添加。

选择 “Create New”链接,在打开的页面中输入一些电影信息,然后点击“Create”按钮:

点击“Create”按钮会将数据提交到服务器,服务器将电影信息出入数据库。再次查看/Movies 地址,在列表中就能看到我们新添加的电影了。

打开文件 Controllers\MoviesController,检查生成的 Index 方法。MoviesController 的包含Index 方法的部分代码如下:

private MovieDBContext db = new MovieDBContext();

        // GET: /Movies/
        public ActionResult Index()
        {
            return View(db.Movies.ToList());
        }

在MovieController 类中,包含了 MovieDBContext 类的实例,你可以使用它进行查询、编辑和删除电影。

MoviesController 的 Index 方法将返回所有数据库中的电影数据,然后将结果传递给 Index 视图。

ASP.NET MVC 同样提供了传递强类型数据或对象到视图的功能。这种强类型的方式提供了更好的编译时检查和更丰富的智能感知,Visual Studio 中的脚手架机制在创建 MoviesController 类和视图的时候使用了这种方式。

检查 Controllers\MoviesController.cs 文件中的 Details 方法,下面是Detais方法的部分代码:

public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Movie movie = db.Movies.Find(id);
            if (movie == null)
            {
                return HttpNotFound();
            }
            return View(movie);
        }

id可以通过路由数据或者查询字符串的方式传递给控制器。

如果找到了电影信息,一个电影的模型就会传递给Details视图。检查一下 Views\Movies\Details.cshtml  文件的内容。

通过文件顶部的@model 语句,你就知道这个视图所期望的什么类型的对象。当你创建了电影控制器,Visual Studio 将会自动在Details.cshtml 文件顶部包含如下语句:

@model MvcMovie.Models.Movie

@model 指令允许使用强类型 Model 对象访问从 Controller 传递给 View 的电影对象(注意,此时的Model对象是 Movie 类型)。例如,在Details.cshtml  模板中,代码将Movie的每一个字段通过强类型的 Model 对象传递给DisplayNameFor  和 DisplayFor HTML帮助方法。Create和 Edit 方法也传递了一个Model给视图,此处不再多讲。

检查 Index.cshtml 模板和 MoviesController.cs 文件的 Index 方法,程序先创建好一个电影模型的列表对象,然后将创建好的列表对象通过View方法传递给视图:

public ActionResult Index()
        {
            return View(db.Movies.ToList());
        }

Visual Studio 自动在 Index.cshtml  文件顶部添加了@model 语句:

@model IEnumerable<MvcMovie.Models.Movie>

@model 指令允许使用强类型 Model 对象访问从 Controller 传递给 View 的电影列表对象(注意,此时的Model对象是 IEnumerable<Movie> 类型)。例如,在Index.cshtml模板中,代码通过foreach 语句循环强类型Model中的每个电影对象。

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ReleaseDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Genre)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Price)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}

因为Model对象是强类型(IEnumerable<Movie>),每个循环中的 item 对象都是 Movie 类型的。这意味着你的代码具有更好的编译时检查和完整的智能感知支持。

Entity Framework Code First 检查连接字符串使用的数据库是否存在,如果不存在,则会自动创建数据库文件。你可在 App_Data 文件夹下查看数据库是否被创建(如果你没有看到Movies.mdf 文件,点击解决方案资源管理器工具栏上的“显示所有文件”按钮,单击“刷新”按钮,然后展开App_Data 文件夹)。

双击 Movies.mdf 文件,打开服务器资源管理器,然后展开 Tables 目录查看 Movies 数据表。

右键 Movies 表,选择“打开表定义”,查看Entity Framework Code First为我们创建的表结构。

右键 Movies 表,选择“显示表数据”查看我们创建的电影数据。

Entity Framework Code First 根据我们Movie 类自动创建了表结构,包括字段名和数据类型。

当我们结束查看或编辑数据库之后,要在服务器资源管理器中关闭连接,右键 MovieDBContext,选择“关闭连接”。(如果你不关闭连接,下一次运行程序的时候可能会出现错误)。

这章就讲这里了,下一章我们讲Edit视图代码。

时间: 2024-10-26 15:51:54

学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据的相关文章

学习ASP .NET MVC5官方教程总结(四)添加模型

学习ASP .NET MVC5官方教程总结(四)添加模型 在前面的几章中,我们学习了,MVC中"C"和"V"的创建方法和基本的使用方法,这一章我们来看一下"C"--模型的创建方法. 我们将添加一些管理电影数据库的类,这些类在ASP.NET MVC 应用程序中扮演"Model"的角色. 我们将使用.NET Framework平台上熟知的Entity Framework 数据访问技术来定义和使用这些模型.Entity Framew

学习ASP .NET MVC5官方教程总结(七)Edit方法和Edit视图详解

学习ASP .NET MVC5官方教程总结(七)Edit方法和Edit视图详解 在本章中,我们研究生成的Edit方法和视图.但在研究之前,我们先将 release date 弄得好看一点.打开Models\Movie.cs 文件.先添加一个引用: <span style="font-size:14px;">using System.ComponentModel.DataAnnotations;</span> 然后在Movie类中添加以下代码: [Display(

学习ASP .NET MVC5官方教程总结(八)搜索查询

学习ASP .NET MVC5官方教程总结(八)搜索查询 在本节中,我们为 Index 方法添加查询功能,使我们能够根据电影的题材或名称进行查找. 首先,我们需要更新 MoviesController 的 Index 方法,代码如下: public ActionResult Index(string searchString) { var movies = from m in db.Movies select m; if (!String.IsNullOrEmpty(searchString))

学习ASP .NET MVC5官方教程总结(十一)Details 和 Delete 方法详解

学习ASP .NET MVC5官方教程总结(十一)Details 和 Delete 方法详解 在这一章,我们将研究一下自动生成的 Details 和Delete 方法. 打开Movie控制器,找到Details方法. // // GET: /Movies/Details/5 public ActionResult Details(Int32 id) { Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFou

学习ASP .NET MVC5官方教程总结目录

学习ASP .NET MVC5官方教程总结目录 我是一个刚刚离开校园,专升本完出来实习的专科生,在学校主攻的是java方向,来到实习的恩源公司后,知道公司的开发基本都是用ASP.NET MVC5做开发的.对于我来说这个还是比较陌生的一种技术,但是我相信有了JSP的开发基础后,来学习这个应该不难理解的,于是我从网上找到了MVC5官方教程来看.官方教程分为11个部分,那我的总结也分11部分来写吧,我在每一部分都会总结官方教程的知识和添加自己的理解.但是我接触这个时间也不长,如果那里理解错了,请随便批

学习ASP .NET MVC5官方教程总结(一)入门

学习ASP .NET MVC5官方教程总结(一)入门 在这一部分我们来学习教程的第一部分--入门,在讲之前先说一下我们的开发环境和版本,我们的开发环境是Visual Studio,版本是2013,我这里提供一个下载地址: http://www.iplaysoft.com/vs2013.html ,在这一章主要讲项目的搭建. 既然是讲项目的搭建,那么首当其冲的问题就是新建项目,打开我们的开发环境: .我们在开发环境的起始页面左侧可以清晰的看见4个字:新建项目.很明显这是新建开发项目的一种方式,第二

学习ASP .NET MVC5官方教程总结(二)添加控制器

学习ASP .NET MVC5官方教程总结(二)添加控制器 在这一章我们来简单讲解一下mvc的概念和控制器的建立和使用还有路由的使用. MVC设计模式是现在一种非常主流的开发模式,他有易于测试和维护的优点.它将传统的web开发分成了三个部分:模型-视图-控制器. 基于 MVC 应用程序中包含: Models: 表示应用程序的数据,并使用验证逻辑强制执行业务规则的数据的类. Views: 您的应用程序用来动态生成 HTML 响应的模板文件. Controllers: 处理传入的请求的浏览器,类检索

学习ASP .NET MVC5官方教程总结(十)添加验证

学习ASP .NET MVC5官方教程总结(十)添加验证 在本章中,我们将为Movie模型添加验证逻辑,并确认验证规则在用户试图使用程序创建和编辑电影时有效. ASP.NET MVC 的一个核心原则是DRY(Don't Repeat Yourself - 不做重复的事情).ASP.NET MVC 鼓励你一次性的指定功能或行为,然后应用程序的其它地方通过映射得到它,这样一来就减少了大量的代码,从而减少了出错误的可能性,并且更易于维护. ASP.NET  MVC  和 Entity Framewor

学习ASP .NET MVC5官方教程总结(三)添加视图

学习ASP .NET MVC5官方教程总结(三)添加视图 在上一章中我们讲了MVC中的"C",控制器Controllers,这一章我们来讲"V",视图Views的知识. 首先,打开我们的项目,打开我们的HelloWorldController,并修改Index(): <span style="font-size:14px;">public ActionResult Index() { return View(); }</span