在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
作者:Rick Anderson and Scott Hanselman 译者:PeterZhang 原文: http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4 注: 边读编译,如有不准确之处,请予以纠正,谢谢!!! ----------------------------------------------------------------------------------------------------------------- 在本部分,将创建一个新的MoviesController类,并编写检索movie数据和使用视图模板在浏览器中显示movie的代码。 在进行下一步之前编译应用程序。 右键Controller文件夹,然后创建一个新的MoviesController控制器。在编译应用程序前,下面的选项不会出现。选择下面的选项:
点击Add。Visual Studio Express 创建如下文件和文件夹:
ASP.NET MVC 4 自动创建 CRUD(create,read,update和delete)action 方法和视图(CRUD action 方法和视图的自动创建被称为 scaffolding)。现在有了一个完整功能的Web应用程序,可以创建、罗列、编辑和删除 movie。 运行程序,通过在浏览器地址栏中附加 /Movie 浏览至 Movies 控制器。因为这个应用程序依赖默认的路由(定义在Global.asax文件中),http://localhost:xxxx/Movies请求 被路由到 Movie 控制器默认的 Index action 方法。换句话说,浏览器请求 http://localhost:xxxx/Movies 等同于浏览器请求http://localhost:xxxx/Movies/Index。结果是一个空的 Movie 列表,因为还没有添加 movie。 创建一个Movie 选择 Create New 链接。输入一个 movie 详细信息,然后点击 Create 按钮。 点击 Create 按钮使 form 被发送(post)到服务器,movie 信息被保存到数据库。然后被重定向到 URL /Movies,这里可以在列表中看到新创建的 movie。 创建更多的 movie。尝试具有功能的 Edit,Details 和 Delete 链接。 检查生成的代码 打开 Controllers\MoviesController 文件,检查生成的 Index 方法,movie 控制器中 Index 方法的部分代码显示如下。 public class MoviesController : Controller { private MovieDBContext db = new MovieDBContext(); // // GET: /Movies/ public ActionResult Index() { return View(db.Movies.ToList()); } 下面的 MovieController 类中的代码实例化一个 movie 数据库上下文实例,如之前描述。你可以使用数据库上下文来查询,编辑和删除 movies。 private MovieDBContext db = new MovieDBContext(); Movies 控制器的请求会返回 movie 数据库中 Movies 表中的所有数据,然后将结果传递给 Index 视图。 强类型模型和@model关键字 本教程早期,看到了控制器如何通过 ViewBag 对象传递数据或对象到视图模板。ViewBag 是动态类型,提供一种方便的延迟绑定方式来传递信息到视图。 ASP.NET MVC 也可以传递强类型数据或对象到视图模板。强类型方式能更好的编译时检查代码和 Visual Studio 里更丰富的智能提示。Visual Studio 中的scaffolding 机制创建 MoviesController 类和视图模板。 在 Controllers\MoviesController.cs 文件中,检查自动生成的 Details 方法。有 Details 方法的 movie 控制器部分代码显示如下。 public ActionResult Details(int id = 0) { Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFound(); } return View(movie); } 如果查找到 movie,Movie 模型的一个实例被传递给 Details 视图。检查 Views\Movies\Details.cshtml 文件的内容。 通过在视图模板文件的顶部添加一个 @model 语句,指定视图期望的对象的类型。当你创建 movie 控制器时,在 Details.cshtml 文件顶部,Visual Studio 自动包含下面的 @model 语句: @model MvcMovie.Models.Movie @model 指令允许通过强类型Model对象访问控制器传递给视图的 movie。例如,在 Details.cshtml 模板中,代码通过强类型Model对象传递 movie 的每一个字段给HTML Helper的 DisplayNameFor 和 DisplayFor。Create 和 Edit 方法以及视图模板也传递 movie model 对象。 查看 Index.cshtml 视图模板和 MoviesController.cs 文件中的 Index 方法。注意当在 Index action 方法中调用 View helper 方法时,代码如何创建一个对象列表。然后从控制器传递 Movie 列表到视图: public ActionResult Index() { return View(db.Movies.ToList()); } 当你创建 movie 控制器时,在 Index.cshtml 文件顶部,Visual Studio Express 自动包含下面的 @model 语句: @model IEnumerable<MvcMovie.Models.Movie> @model 指令允许访问 控制器通过强类型 Model 对象传递给视图的 movie 列表。例如,在index.cshtml 模板中,代码通过在强类型 Model 对象上的 foreach 语句循环遍历 movies: @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 Server LocalDB Entity Framework 的 Code First 检查指向 Movie 数据的数据库连接字符串不存在,所以 Code First 自动创建数据库。可以通过查看 App_Data 文件夹确认数据库创建了。如果没有看到 Movies.mdf 文件,点击 Solution Explorer 工具栏上的 “Show All Files” 按钮,然后展开 App_Data 文件夹。
双击 Moves.mdf 打开 DATABASE EXPLORER,然后展开 Tables 文件夹查看 Movies 表。
注意:如果没有database explorer,在TOOLS菜单中,选择Connect to Database,然后取消Choose Data Source对话框。这会强制打开database explorer。 注意:如果你正在使用VWD或者Visual Studio 2010,看到一个类似如下情况的错误: •The database 'C:\Webs\MVC4\MVCMOVIE\MVCMOVIE\APP_DATA\MOVIES.MDF' 右键 Movie 表,选择 “Show Table Data” 查看创建的数据。 右键 Movie 表,选择 “Open Table Definition” 查看 Entity Framework 的 Code First 创建的表结构。 注意 Movies 表架构如何映射到之前创建的 Movie 类。Entity Framework 的 Code First 根据 Movie 类自动创建该架构。 当完成时,通过右键 MovieDBContext 选择 “Close Connection” 关闭连接。(如果不关闭连接,下次运行项目时可能会获得错误。) 现在已经有了数据库和显示数据库中内容的简单列表页面。在下面的教程中,将会检查 scaffolded 代码的其他部分,然后添加一个 SearchIndex 方法,再添加一个可以搜索数据库中 movie 的 SearchIndex 视图。 |
请发表评论