国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > web前端 > htmlcss > 学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据

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

来源:程序员人生   发布时间:2015-05-04 10:15:04 阅读次数:3903次

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

        在本章中,我们将新建1个MoviesController 控制器,并编写获得电影数据的代码,使用视图模板将数据展现在阅读器中。

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

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


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

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



        在点击添加按钮以后vs会创建以下文件和文件夹:

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

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

       ・ 在ViewsMovies 文件夹中创建了Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml, 和 Index.cshtml  视图文件。

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

       你现在已有了1个具有完全功能的利用程序,你可使用它来创建、列表显示、编辑和删除电影了。

运行利用程序,在阅读器中查看地址 http://localhost:xxxxx/Movies 。由于程序依赖默许的路由,所以阅读器要求的地址分配给 MoviesController的 Index 方法。

        换句话说,阅读器要求http://localhost:xxxxx/Movies 地址同等于要求http://localhost:xxxxx/Movies/Index 地址。阅读器中显示1个空的电影列表,由于我们目前还没有添加。


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

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

        

打开文件 ControllersMoviesController,检查生成的 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 类和视图的时候使用了这类方式。

检查 ControllersMoviesController.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可以通过路由数据或查询字符串的方式传递给控制器。

       如果找到了电影信息,1个电影的模型就会传递给Details视图。检查1下 ViewsMoviesDetails.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 方法也传递了1个Model给视图,此处不再多讲。

检查 Index.cshtml 模板和 MoviesController.cs 文件的 Index 方法,程序先创建好1个电影模型的列表对象,然后将创建好的列表对象通过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,选择关闭连接。(如果你不关闭连接,下1次运行程序的时候可能会出现毛病)。

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

 

 

 

 

 

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生