ASP.NET MVC4 新手入门教程之五 ---5.用控制器访问模型数据
在本节中,将创建一个新的MoviesController
类并编写代码来检索电影数据并将其显示在浏览器中使用一个视图模板。
才走出下一步生成应用程序。
用鼠标右键单击控制器文件夹中并创建一个新的 MoviesController
控制器。下面的选项不会显示,直到您构建您的应用程序。选择以下选项:
- 控制器的名称: MoviesController。(这是默认值)。
- 模板: MVC 控制器的读/写操作和视图,使用实体框架.
- 模型类:电影 (MvcMovie.Models).
- 数据上下文类: MovieDBContext (MvcMovie.Models).
- 视图: Razor (CSHTML)。(默认值)。
单击添加。Visual Studio 速成版创建的下列文件和文件夹:
- 该项目的控制器文件夹中的MoviesController.cs文件。
- 电影文件夹文件夹中项目的意见。
- Create.cshtml、 Delete.cshtml、 Details.cshtml、 Edit.cshtml,和Index.cshtml新的Views\Movies文件夹中。
ASP.NET MVC 4 自动创建的 CRUD (创建、 读取、 更新和删除) 操作方法和视图为您 (CRUD 操作方法和视图的自动创建称为脚手架)。你现在有一个功能完整的 web 应用程序允许您创建、 列表、 编辑和删除电影条目。
运行该应用程序,然后浏览到Movies
控制器通过将/Movies追加到您的浏览器的地址栏中的 URL。因为应用程序依赖于默认路由 (在Global.asax文件中定义),浏览器请求http://localhost:xxxxx/电影被路由到默认Index
操作方法的Movies
控制器。换句话说,浏览器请求http://localhost:xxxxx/电影实际上是相同的浏览器请求http://localhost:xxxxx/电影/索引。结果是电影,一个空列表,因为您没有添加任何尚未。
创建电影
选择创建新的链接。输入有关电影的一些详细信息,然后单击创建按钮。
单击创建按钮使窗体被发送到服务器,电影信息保存在数据库中的位置。您然后被重定向到/Movies的 URL,在那里你可以看到在清单中新创建的电影。
创建几个更多的电影条目。请尝试编辑、详细信息和删除链接指的是所有功能。
检查生成的代码
打开Controllers\MoviesController.cs文件并检查生成的Index
方法。部分影院控制器与Index
方法如下所示。
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
//
// GET: /Movies/
public ActionResult Index()
{
return View(db.Movies.ToList());
}
下面的行,从MoviesController
类实例化电影数据库上下文,如前面所述。电影数据库上下文可用于查询、 编辑和删除电影。
private MovieDBContext db = new MovieDBContext();
对Movies
控制器的请求返回Movies
表的电影数据库中的所有条目,然后将结果传递到Index
视图。
强类型的模型和 @model 关键字
早些时候在本教程中,您看到了如何一个控制器可以将传递数据或对象给使用ViewBag
对象的视图模板。ViewBag
是一个动态的对象,提供了简便的后期绑定方法,将信息传递到视图。
ASP.NET MVC 还提供了通过强烈的能力类型数据或对象的视图模板。这强类型方法使更好的编译时检查你的代码和更丰富的智能感知在 Visual Studio 编辑器中。基架机制在 Visual Studio 中的把这种方法用MoviesController
类和视图模板时创建它的方法和意见。
在Controllers\MoviesController.cs文件中检查生成的Details
方法。部分影院控制器的Details
的方法如下所示。
public ActionResult Details(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
如果找到了一个Movie
,Movie
模型的实例传递到详细信息视图。检查Views\Movies\Details.cshtml文件的内容。
通过包括顶部的视图模板文件的@model
语句,您可以指定查看预计的对象的类型。当您创建电影控制器时,Visual Studio 会自动包含Details.cshtml文件顶部@model
声明如下:
@model MvcMovie.Models.Movie
此@model
指令允许您访问控制器传递给视图通过使用强类型化的Model
对象的那部电影。例如,在Details.cshtml模板中,该代码将电影的每个字段的DisplayNameFor
和DisplayFor HTML 帮手与强类型化的Model
对象。创建和编辑方法和视图模板还可传递电影模型对象。
检查Index.cshtml视图模板和Index
法在MoviesController.cs文件中。请注意这些代码如何创建一个List
对象,当它调用View
帮助器方法在Index
操作方法。代码然后将此Movies
列表从控制器传递到视图:
public ActionResult Index()
{
return View(db.Movies.ToList());
}
当您创建电影控制器时,Visual Studio 速成版会自动包含Index.cshtml文件顶部@model
声明如下:
@model IEnumerable<MvcMovie.Models.Movie>
此@model
指令允许您访问控制器传递给视图通过使用强类型化的Model
对象的电影列表的内容。例如,在Index.cshtml模板中,代码循环遍历看电影,在强类型化的Model
对象边干边学foreach
语句:
@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>
<th>
@Html.DisplayFor(modelItem => item.Rating)
</th>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", { id=item.ID })
</td>
</tr>
}
Model
对象强类型 (如 IEnumerable<Movie>
对象),因为每个循环中的item
对象的类型为Movie
。除其他好处外,这意味着你得到编译时检查代码的和完整的智能感知支持在代码编辑器中:
使用 SQL 服务器 LocalDB
实体框架代码优先的检测提供了数据库连接字符串指向Movies
数据库,然而,并不存在,所以代码优先将自动创建数据库。您可以验证这是通过在App_Data文件夹中查找。如果你看不到的Movies.mdf文件,单击显示所有文件按钮在解决方案资源管理器工具栏上,单击刷新按钮,,然后展开App_Data文件夹。
双击Movies.mdf打开数据库资源管理器,然后展开表文件夹,以便查看电影表。
注意: 如果你使用 VWD 或 Visual Studio 2010,会错误类似于以下以下任一操作:
- 数据库 ' C:\Webs\MVC4\MVCMOVIE\MVCMOVIE\APP_DATA\MOVIES。中密度纤维板无法打开,因为它是 706 的版本。此服务器支持 655 和更早的版本。不支持降级路径。
- "此异常由用户代码未处理"提供的 SqlConnection 未指定初始目录。
您需要安装的SQL Server 数据工具和LocalDB。验证在前一页上指定的MovieDBContext
连接字符串。
用鼠标右键单击Movies
表并选择显示表数据以查看您创建的数据。
用鼠标右键单击Movies
表并选择打开表定义,请参阅实体框架代码优先将为您创建的表结构。
请注意如何Movies
表映射到 Movie
类的架构创建早些时候。实体框架代码优先自动为您基于Movie
类创建此架构。
当您完成时,关闭连接,通过右键单击MovieDBContext ,然后选择关闭连接。(如果您没有关闭连接,您可能会出现错误的下次运行该项目)。
你现在有数据库和一个简单列表页,以便显示从它的内容。在接下来的教程中,我们会检查其余搭建的代码并添加SearchIndex
方法和SearchIndex
视图使您可以搜索在此数据库中的电影。