天天看點

【譯】ASP.NET MVC 5 教程 - 6:通過控制器通路模型的資料

在本節中,你将建立一個MoviesController 類,并編寫擷取電影資料的代碼,使用視圖模闆将資料展示在浏覽器中。

在進行下一步之前,你需要先編譯應用程式,否則在添加控制器的時候會出錯。

在解決方法資料總管的Controllers檔案夾右鍵,選擇"添加">"支架":

在“添加支架”對話框,選擇 MVC 5 Controller with read/write actions and views, using Entity Framework,然後單擊“添加”按鈕。

在Controller name輸入框中輸入 MoviesController。在Model class 選擇清單中,選擇 Movie (MvcMovie.Models)。在Data context class選擇清單中,選擇 MovieDBContext(MvcMovie.Models) 。其它幾個選項保持預設值,完整的截圖如下:

在點選“Add”按鈕之後(如果你遇到錯誤,很有可能是因為你沒有編譯項目),Visual Studio會建立如下檔案和檔案夾:

在Controllers 檔案夾中建立了MoviesController.cs 檔案

在Views 檔案夾中建立了Movies 檔案夾

在Views\Movies 檔案夾中建立了Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml, 和 Index.cshtml  視圖檔案。

ASP.NET MVC 5 自動建立了CRUD(create, read, update, delete)操作方法,并為他們建立好了視圖。你現在已經有了一個擁有完整功能的應用程式,你可以使用它來建立、清單顯示、編輯和删除電影了。

運作應用程式,在浏覽器中檢視位址 http://localhost:xxxxx/Movies 。因為程式依賴預設的路由,是以浏覽器請求的位址配置設定給 MoviesController的 Index 方法。換句話說,浏覽器請求http://localhost:xxxxx/Movies 位址等同于請求http://localhost:xxxxx/Movies/Index 位址。浏覽器中顯示一個空的電影清單,因為我們目前還沒有添加。

添加電影

選擇 “Create New”連結,在打開的頁面中輸入一些電影資訊,然後點選“Create”按鈕:

點選“Create”按鈕會将資料送出到伺服器,伺服器将電影資訊出入資料庫。再次檢視/Movies 位址,在清單中就能看到我們新添加的電影了。

建立更多的電影記錄,然後試試編輯、詳細資訊和删除功能。

打開檔案 Controllers\MoviesController,檢查生成的 Index 方法。MoviesController 的包含Index 方法的部分代碼如下:

在MovieController 類中,包含了 MovieDBContext 類的執行個體,你可以使用它進行查詢、編輯和删除電影。

MoviesController 的 Index 方法将傳回所有資料庫中的電影資料,然後将結果傳遞給 Index 視圖。

強類型模型和@model關鍵字

在之前的章節中,我們已經介紹了如果使用 ViewBag 将資料從控制器傳遞給視圖。ViewBag 是一個動态對象,提供了一個便捷的後期綁定的方式将資料傳遞給視圖。

ASP.NET MVC 同樣提供了傳遞強類型資料或對象到視圖的功能。這種強類型的方式提供了更好的編譯時檢查和更豐富的智能感覺,Visual Studio 中的腳手架機制在建立 MoviesController 類和視圖的時候使用了這種方式。

檢查 Controllers\MoviesController.cs 檔案中的 Details 方法,下面是Detais方法的部分代碼:

參數 id 通常會作為路由資料傳遞給控制器,例如 <code>http://localhost:1234/movies/details/1 </code>将會設定控制器為 MoviesController,操作為Details,參數 id 為1。你還可以通過查詢字元串傳遞 id:<code>http://localhost:1234/movies/details?id=1</code>

如果找到了電影資訊,一個電影的模型就會傳遞給Details視圖。檢查一下 Views\Movies\Details.cshtml  檔案的内容。

通過檔案頂部的@model 語句,你就知道這個視圖所期望的什麼類型的對象。當你建立了電影控制器,Visual Studio 将會自動在Details.cshtml 檔案頂部包含如下語句:

@model 指令允許使用強類型 Model 對象通路從 Controller 傳遞給 View 的電影對象(注意,此時的Model對象是 Movie 類型)。例如,在Details.cshtml  模闆中,代碼将Movie的每一個字段通過強類型的 Model 對象傳遞給DisplayNameFor  和 DisplayFor HTML幫助方法。Create和 Edit 方法也傳遞了一個Model給視圖,此處不再多講。

檢查 Index.cshtml 模闆和 MoviesController.cs 檔案的 Index 方法,程式先建立好一個電影模型的清單對象,然後将建立好的清單對象通過View方法傳遞給視圖:

Visual Studio 自動在 Index.cshtml  檔案頂部添加了@model 語句:

@model 指令允許使用強類型 Model 對象通路從 Controller 傳遞給 View 的電影清單對象(注意,此時的Model對象是 IEnumerable&lt;Movie&gt; 類型)。例如,在Index.cshtml模闆中,代碼通過foreach 語句循環強類型Model中的每個電影對象。

因為Model對象是強類型(<code>IEnumerable&lt;Movie&gt;</code>),每個循環中的 item 對象都是 Movie 類型的。這意味着你的代碼具有更好的編譯時檢查和完整的智能感覺支援:

Entity Framework Code First 檢查連接配接字元串使用的資料庫是否存在,如果不存在,則會自動建立資料庫檔案。你可以在 App_Data 檔案夾下檢視資料庫是否被建立(如果你沒有看到Movies.mdf 檔案,點選解決方案資料總管工具欄上的“顯示所有檔案”按鈕,單擊“重新整理”按鈕,然後展開App_Data 檔案夾)。

輕按兩下 Movies.mdf 檔案,打開伺服器資料總管,然後展開 Tables 目錄檢視 Movies 資料表。

右鍵 Movies 表,選擇“顯示表資料”檢視我們建立的電影資料。

右鍵 Movies 表,選擇“打開表定義”,檢視Entity Framework Code First為我們建立的表結構。

ntity Framework Code First 根據我們Movie 類自動建立了表結構,包括字段名和資料類型。

當我們結束檢視或編輯資料庫之後,要在伺服器資料總管中關閉連接配接,右鍵 MovieDBContext,選擇“關閉連接配接”。(如果你不關閉連接配接,下一次運作程式的時候可能會出現錯誤)

現在我們已經有了資料庫和簡單的幾個頁面來顯示資料,在接下來的章節中,我們将研究其它支架生成的代碼,并添加一個SearchIndex方法和SearchIndex視圖,用來查找資料庫中的電影。