起飛網 ASP.NET MVC 5 學習教程目錄:
- 添加控制器
- 添加視圖
- 修改視圖和布局頁
- 控制器傳遞數據給視圖
- 添加模型
- 創建連接字符串
- 通過控制器訪問模型的數據
- 生成的代碼詳解
- 使用 SQL Server LocalDB
- Edit方法和Edit視圖詳解
- 添加查詢
- Entity Framework 數據遷移之添加字段
- 添加驗證
- Details 和 Delete 方法詳解
打開文件 Controllers\MoviesController,檢查生成的 Index 方法。MoviesController 的包含Index 方法的部分代碼如下:
代碼清單1:MoviesController.cs
public class MoviesController : Controller { private MovieDBContext db = new MovieDBContext(); // // GET: /Movies/ public ActionResult Index() { return View(db.Movie.ToList()); }
在MovieController 類中,包含了 MovieDBContext 類的實例,你可以使用它進行查詢、編輯和刪除電影。
MoviesController 的 Index 方法將返回所有數據庫中的電影數據,然后將結果傳遞給 Index 視圖。
強類型模型和@model關鍵字
在之前的章節中,我們已經介紹了如果使用 ViewBag 將數據從控制器傳遞給視圖。ViewBag 是一個動態對象,提供了一個便捷的后期綁定的方式將數據傳遞給視圖。
ASP.NET MVC 同樣提供了傳遞強類型數據或對象到視圖的功能。這種強類型的方式提供了更好的編譯時檢查和更豐富的智能感知,Visual Studio 中的腳手架機制在創建 MoviesController 類和視圖的時候使用了這種方式。
檢查 Controllers\MoviesController.cs 文件中的 Details 方法,下面是Detais方法的部分代碼:
代碼清單2:Details 方法 - Controllers\MoviesController.cs
public ActionResult Details(Int32 id) { Movie movie = db.Movie.Find(id); if (movie == null) { return HttpNotFound(); } return View(movie); }
參數 id 通常會作為路由數據傳遞給控制器,例如 http://localhost:1234/movies/details/1 將會設置控制器為 MoviesController,操作為 Details,參數 id 為1。你還可以通過查詢字符串傳遞 id:http://localhost:1234/movies/details?id=1
如果找到了電影信息,一個電影的模型就會傳遞給Details視圖。檢查一下 Views\Movies\Details.cshtml 文件的內容。
通過文件頂部的@model 語句,你就知道這個視圖所期望的什么類型的對象。當你創建了電影控制器,Visual Studio 將會自動在Details.cshtml 文件頂部包含如下語句:
代碼清單3:@model語句 - Details.cshtml
@model MvcMovie.Models.Movie
@model 指令允許使用強類型 Model 對象訪問從 Controller 傳遞給 View 的電影對象(注意,此時的Model對象是 Movie 類型)。例如,在Details.cshtml 模板中,代碼將Movie的每一個字段通過強類型的 Model 對象傳遞給DisplayNameFor 和 DisplayFor HTML幫助方法。Create 和 Edit 方法也傳遞了一個Model給視圖,此處不再多講。
檢查 Index.cshtml 模板和 MoviesController.cs 文件的 Index 方法,程序先創建好一個電影模型的列表對象,然后將創建好的列表對象通過View方法傳遞給視圖:
代碼清單4:Index 方法 - MoviesController.cs
public ActionResult Index() { return View(db.Movie.ToList()); }
Visual Studio 自動在 Index.cshtml 文件頂部添加了@model 語句:
代碼清單5:@model語句 - Index.cshtml
@model IEnumerable<MvcMovie.Models.Movie>
@model 指令允許使用強類型 Model 對象訪問從 Controller 傳遞給 View 的電影列表對象(注意,此時的Model對象是 IEnumerable<Movie> 類型)。例如,在Index.cshtml模板中,代碼通過foreach 語句循環強類型Model中的每個電影對象。
代碼清單6:foreach 代碼塊 - Index.cshtml
@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 類型的。這意味着你的代碼具有更好的編譯時檢查和完整的智能感知支持:
圖1:foreach語句中的智能感知
本文同時發布在起飛網,原文地址:http://www.qeefee.com/mvc/mvc-5-examining-the-generated-code

