作者: 里克·安德森
本教程将介绍如何使用 Microsoft Visual Web Developer 2010 Express Service Pack 1 生成 ASP.NET MVC Web 应用程序的基本知识,这是 visual Studio 的免费 Microsoft版本。 在开始之前,请确保已安装下面列出的先决条件。 可以通过单击以下链接来安装所有这些组件: Web 平台安装程序。 或者,可使用以下链接单独安装各个必备软件:
如果使用 Visual Studio 2010 而不是 Visual Web Developer 2010,请单击以下链接安装必备组件: Visual Studio 2010 先决条件。
本主题随附了具有 VB.NET 源代码的 Visual Web 开发人员项目。 下载 VB.NET 版本。 如果需要 C#,请切换到 本教程的 C# 版本 。
在本部分中,你将创建一个新 MoviesController 类并编写代码,以检索电影数据,并使用视图模板在浏览器中显示它。 在继续操作之前,请务必生成应用程序。
右键单击 “控制器” 文件夹并创建新的 MoviesController 控制器。 选择以下选项:
- 控制器名称: MoviesController。 (这是默认值。)
- 模板: 使用 Entity Framework 使用读/写操作和视图的控制器。
- 模型类:电影(MvcMovie.Models)。
- 数据上下文类:MovieDBContext (MvcMovie.Models)。
- 视图: Razor (CSHTML)。 (默认值)。
单击“添加” 。 Visual Web 开发人员创建以下文件和文件夹:
- 项目的 Controllers 文件夹中的MoviesController.vb文件。
- 项目的 Views 文件夹中的 Movies 文件夹。
- 在新的 Views\Movies 文件夹中,Create.vbhtml、Delete.vbhtml、Details.vbhtml、Edit.vbhtml 和 Index.vbhtml。
ASP.NET MVC 3 基架机制会自动为你创建 CRUD(创建、读取、更新和删除)操作方法和视图。 现在,你有了一个功能齐全的 Web 应用程序,可用于创建、列出、编辑和删除电影条目。
运行应用程序并通过将 /Movies 追加到浏览器地址栏中的 URL,浏览到Movies控制器。 由于应用程序依赖于默认路由(在 Global.asax 文件中定义),因此浏览器请求 http://localhost:xxxxx/Movies 将路由到控制器的默认 Index 操作方法 Movies 。 换句话说,浏览器请求 http://localhost:xxxxx/Movies 实际上与浏览器请求 http://localhost:xxxxx/Movies/Index相同。 结果是一个空的电影列表,因为你尚未添加任何影片。

创建电影
选择“新建”链接。 输入有关电影的一些详细信息,然后单击“ 创建 ”按钮。

单击“创建”按钮会导致窗体发布到服务器,其中电影信息保存在数据库中。 然后重定向到 /Movies URL,可在其中查看列表中新建的电影。
再创建几个其他的电影条目。 试用“编辑”、“详细信息”和“删除”链接,它们均可正常工作。
检查生成的代码
打开 Controllers\MoviesController.vb 文件并检查生成的Index方法。 下面显示了带该方法的电影控制器 Index 的一部分。
Public Class MoviesController
Inherits System.Web.Mvc.Controller
Private db As MovieDBContext = New MovieDBContext
'
' GET: /Movies/
Function Index() As ViewResult
Return View(db.Movies.ToList())
End Function
类中的 MoviesController 以下行实例化电影数据库上下文,如前所述。 可以使用电影数据库上下文来查询、编辑和删除电影。
Private db As MovieDBContext = New MovieDBContex
对 Movies 控制器的请求将返回电影数据库表中的所有条目 Movies ,然后将结果传递给 Index 视图。
强类型模型和 @model 关键字
在本教程的前面部分,你了解了控制器如何使用该 ViewBag 对象将数据或对象传递到视图模板。 ViewBag这是一个动态对象,它提供了一种方便的后期绑定方式,用于将信息传递给视图。
ASP.NET MVC 还提供将强类型数据或对象传递到视图模板的功能。 这种强类型方法可在 Visual Web 开发人员编辑器中更好地对代码进行编译时检查和更丰富的 IntelliSense。 我们将此方法与 MoviesController 类和 Index.vbhtml 视图模板配合使用。
请注意代码在操作方法中Index调用View帮助程序方法时如何创建List对象。 然后,代码将此 Movies 列表从控制器传递到视图:
Function Index() As ViewResult
Return View(db.Movies.ToList())
End Function
通过在视图模板文件的顶部包括 @ModelType 语句,可以指定视图所需的对象类型。 创建电影控制器时,Visual Web 开发人员会自动在 Index.vbhtml 文件的顶部包含以下@model语句:
@ModelType IEnumerable(Of MvcMovie.Movie)
此 @ModelType 指令允许你使用 Model 强类型对象访问控制器传递给视图的电影列表。 例如,在 Index.vbhtml 模板中,代码通过对强类型Model对象执行foreach语句遍历电影:
@For Each item In Model
Dim currentItem = item
@<tr>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Title)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.ReleaseDate)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Genre)
</td>
<td>
@Html.DisplayFor(Function(modelItem) currentItem.Price)
</td>
<td>
@Html.ActionLink("Edit", "Edit", New With {.id = currentItem.ID}) |
@Html.ActionLink("Details", "Details", New With {.id = currentItem.ID}) |
@Html.ActionLink("Delete", "Delete", New With {.id = currentItem.ID})
</td>
</tr>
Next
由于对象 Model 是强类型化(作为对象 IEnumerable<Movie> ), item 因此循环中的每个对象都键入为 Movie。 除其他优势外,这意味着可以在代码编辑器中获取代码的编译时检查和完整的 IntelliSense 支持:
使用 SQL Server Compact
Entity Framework Code First 检测到所提供的数据库连接字符串指向Movies尚不存在的数据库,因此 Code First 会自动创建数据库。 可以通过在 App_Data 文件夹中查找来创建它。 如果未看到 Movies.sdf 文件,请单击解决方案资源管理器工具栏中的“显示所有文件”按钮,单击“刷新”按钮,然后展开App_Data文件夹。
双击 Movies.sdf 打开 服务器资源管理器。 然后展开 “表” 文件夹以查看已在数据库中创建的表。
注意
如果双击 Movies.sdf 时收到错误,请确保已安装 Visual Studio 2010 SP1 Tools for SQL Server Compact 4.0。 (有关软件的链接,请参阅本教程系列第 1 部分中的先决条件列表。如果立即安装版本,则必须关闭并重新打开 Visual Web 开发人员。
有两个表,一个用于 Movie 实体集,然后是表 EdmMetadata 。 实体 EdmMetadata 框架使用该表来确定模型和数据库何时不同步。
右键单击Movies该表,然后选择“显示表数据”以查看所创建的数据。
右键单击该 Movies 表,然后选择“ 编辑表架构”。

请注意表的 Movies 架构如何映射到 Movie 之前创建的类。 Entity Framework Code First 根据 Movie 类自动创建此架构。
完成后,关闭连接。 (如果未关闭连接,则下次运行项目时可能会收到错误)。
现在,你拥有数据库和一个简单的列表页,用于显示其中的内容。 在下一教程中,我们将检查基架代码的其余部分,并添加一个 SearchIndex 方法和 SearchIndex 视图,用于在此数据库中搜索电影。








