ASP.NET MVC3教程
ASP.NET MVC3 电影示例系列:共九篇 [文章列表]
这里的文章是ASP.NET官网的教程,这里做翻译而已,才疏学浅,翻译错误的地方,请指正,原文地址:Accessing your Model's Data from a Controller (C#)
在本节中,你将创建一个新的MovieController类,编写获取电影数据并使用视图模板将数据展示在浏览器中的代码。在开始之前请记得生成下你的应用程序。
右键Controllers文件夹,创建一个新的MoviesController控制器。使用下面这些设置:
· 控制器名称:MoviesController。(这是默认的)
· 模板:包含读/写操作和视图的控制器(使用Entity Framework)
· 模型类:Movie(MvcMovie.Models)
· 数据上下文类: MovieDBContext(MvcMovie.Models)
· 视图:Razor(CSHTML)。(默认选项)
点击添加。Visual Web Developer创建如下的文件和文件夹(译注:本教程使用的是Visual Web Developer,VS也类似):
· 在项目的Controllers文件夹下有一个MoviesController.cs文件
· 在项目的Views文件夹下有一个Movies 文件夹
· 在新建的Views\Movies文件夹下有Create.cshtml,Delete.cshtml,Details.cshtml,Edit.cshtml和Index.cshtml
ASP.NET MVC3的架构机制将自动为你生成CRUD(create, read,update,delete)行为方法和视图。现在你已经拥有了创建,展示,编辑和删除电影条目的一整套网站应用程序功能。
运行应用程序,在你浏览器的地址栏中将/Movies 附加到当前URL后面来访问Movies控制器。因为应用程序依赖默认的路由(在Global.asax文件中定义),浏览器请求http://localhost:xxxxx/Movies将被路由到默认的Movies控制器中Index行为方法。换句话说,浏览器请求http://localhost:xxxxx/Movies 实际上和浏览器请求http://localhost:xxxxx/Movies/Index是一样的。访问结果是一个空的电影列表,这是因为你还没有添加任何数据。
添加电影
点击新建(Create New)链接。键入一些电影的详细信息而后点击创建(Create)按钮。
点击创建(Create)按钮触发表单提交到服务器,电影信息将在哪里被存入数据库中。而后你重定位到/Movies ,你将能看到新创建的电影已经在列表中了。
多创建几个电影项。尝试使用编辑(Edit),详细(Details),和删除(Delete)链接来体验所有功能。
测试生成的代码
打开Controllers\MoviesController.cs文件,并且测试生成的Index方法。movie控制器中含Index方法的部分代码如下所示:
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
//
// GET: /Movies/
public ViewResult Index()
{
return View(db.Movies.ToList());
}
下面这行是MoviesController类中像前面所讲那样实例化电影数据库上下文。你可以使用电影数据库的上下文来查询,编辑和删除电影。
private MovieDBContext db = new MovieDBContext();
到Movies控制器的请求将会返回电影数据库中Movies表的所有记录,并且会将信息传递到Index视图。
强类型模型和@model 关键字
在本教程中的前面章节,你已经看到控制器是如何通过ViewBag对象将数据或对象传递到视图模板中。ViewBag是一个动态对象,它提供了一个方便的后期绑定的方式来将信息传递到视图中。
ASP.NET MVC中也提供传递强类型数据或对象到视图模板的功能。强类型方法能够提供更好的代码编译时的检查和在Visual Web Developer编辑中提供更丰富的智能感知。我们将在MoveisController类和Index.cshtml视图模板中使用这个方法。
注意代码是如何在Index行为方法中调用视图帮助器方法时创建List对象的。代码随后将Movies列表从控制器传递到视图中:
public ViewResult Index()
{
return View(db.Movies.ToList());
}
通过在视图模板文件的顶端包含@model 语句,你可以指定视图期待得到的对象的类型。当你创建好电影控制器之后,Visual Web Developer 自动会在Index.cshtml文件头部包含如下的@model语句:
@model IEnumerable<MvcMovie.Models.Movie>
@model指令允许你访问控制器使用强类型模型对象传递给视图的电影列表。比如,在Index.cshtml模板中,代码通过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>
<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>
}
因为模型对象是强类型的(作为Ienumerable<Movie>对象),在循环中每个对象都被当作为Movie。这还有其他好处,这意味着,你可以获得代码的编译时检查和代码编辑器中智能感知的全支持:
与SQL Server Compact配合工作
Entity Framework Code First检测到当前提供的数据库连接字符串指向的Movies数据库还不存在,因此Code First将会自动创建数据库。你可以通过查看App_Data文件夹来验证它生成的数据库。如果你没有看到Movies.sdf文件,点击解决方案资源管理器上的工具栏内的显示所有文件,点击刷新按钮,而后在展开App_Data文件夹。
双击Movies.sdf,打开服务器资源管理器(Server Explorer)。然后展开表(Tables)文件夹查看已经在数据库中创建的表。
注意:如果你双击Movies.sdf时有报错,确认你已经安装了SQL Server Compact 4.0(运行时 + 工具支持)。(对于这个软件的链接,请参看当前系列教程的第一部分的先决条件列表。)如果你现在安装好了,你将需要关闭并重新打开Visual Web Developer。
文件夹里面有两个表,一个是Movie的数据实体集而另外一个是EdmMetadata表。当模型和数据库不同步的时候,Entity Framework 使用EdmMetadata表来做决断。
右键Movies表并选择显示表数据(Show Table Data)来查看你创建的数据。
右键Movies表,并选择编辑表结构(Edit Table Schema)。
注意Movies表结构是如何映射到你先前创建的Movie类的。Entity Framework Code First 自动基于你的Movie类创建这个表结构。
当你完成编辑,关闭连接。(如果你没有关闭连接,你可能会在下次运行项目的时候报错)。
现在你已经拥有一个数据库并且有一个简单的列表页来显示数据库中的内容。在下一个教程中,我们将测试余下的架构代码(译注:scaffolded code,架构代码?)并添加一个SearchIndex方法和一个SearchIndex视图来让你从数据库中查找电影。