共用方式為


從控制器存取模型資料 (VB)

作者:Rick Anderson

本教學課程將說明基本概念,簡介如何使用 Microsoft Visual Web Developer 2010 Express Service Pack 1 (Visual Studio Microsoft 的免費版本) 建置 ASP.NET MVC Web 應用程式。 開始之前,請確定您已安裝下列必要項目。 您可按以下連結安裝所有專案:Web Platform Installer。 或者可使用下列連結個別安裝必要條件:

如果您使用 Visual Studio 2010 而非 Visual Web Developer 2010,請按以下連結安裝必要條件:Visual Studio 2010 必要條件

本主題隨附內含 VB.NET 原始程式碼的 Visual Web Developer 專案。 下載 VB.NET 版本。 如果您偏好使用 C#,請改參閱本教學課程的 C# 版。

在本節,您將建立新的 MoviesController 類別,然後撰寫程式碼來擷取電影資料,並使用檢視範本在瀏覽器中顯示。 在繼續之前,請務必先建置應用程式。

以滑鼠右鍵按一下 Controllers 資料夾,然後建立新的 MoviesController 控制器。 選取下列選項:

  • 控制器名稱:MoviesController。 (這是預設值)。
  • 範本:含讀取/寫入動作和檢視的控制器,使用 Entity Framework
  • 模型類別:Movie (MvcMovie.Models)
  • 資料內容類別:MovieDBContext (MvcMovie.Models)
  • 檢視:Razor (CSHTML)。 (預設值)。

5addMovieController

按一下新增。 Visual Web Developer 會建立下列檔案和資料夾:

  • 一個「MoviesController.vb」檔案 (在專案的 Controllers 資料夾中)。
  • 一個「Movies」資料夾 (在專案的 Views 資料夾中)
  • 「Create.vbhtml」、「Delete.vbhtml」、「Details.vbhtml」、「Edit.vbhtml」和 「Index.vbhtml」 (在新的 Views\Movies 資料夾中)。

5_ScaffoldMovie

ASP.NET MVC 3 建構機制自動建立了 CRUD (建立、讀取、更新和刪除) 動作方法和檢視。 您現在擁有功能完整的 Web 應用程式,可建立、列出、編輯和刪除電影項目。

執行應用程式並瀏覽至 Movies 控制器,方法是將 /Movies 附加到瀏覽器網址列中的 URL。 由於應用程式仰賴預設的路由 (在「Global.asax」 檔案中定義),因此瀏覽器要求 http://localhost:xxxxx/Movies 會路由至 Movies 控制器預設的 Index 動作方法。 換句話說,瀏覽器要求 http://localhost:xxxxx/Movies 基本上與瀏覽器要求 http://localhost:xxxxx/Movies/Index 相同。 結果是空白的電影清單,因為您尚未新增任何電影。

螢幕擷取畫面顯示 M V C 電影應用程式的 [我的電影清單] 頁面。

建立電影

選取 Create New 連結。 輸入電影的詳細資料,然後按一下 [建立] 按鈕。

螢幕擷取畫面顯示 M V C 電影應用程式的 [建立] 頁面。

按一下 [建立] 按鈕,表單即張貼至伺服器,也就是電影資訊在資料庫中的儲存位置。 接著,系統會重新導向至 /Movies URL,您可以在清單中看到新建立的電影。

IndexWhenHarryMet

建立幾個電影項目。 嘗試 EditDetailsDelete 連結,這些連結都可以正常運作。

檢查已產生的程式碼

開啟 Controllers\MoviesController.vbIndex 檔案並檢查產生的 方法。 使用 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 Developer 編輯器中的編譯階段,更妥善地檢查程式碼並提供更豐富的 IntelliSense。 我們將此方法與 MoviesController 類別和 Index.vbhtml 檢視範本搭配使用。

請注意程式碼呼叫 Index 動作方法的 View 協助程式方法時,將如何建立 List 物件。 程式碼會將此 Movies 清單從控制器傳遞至檢視:

Function Index() As ViewResult
            Return View(db.Movies.ToList())
       End Function

在檢視範本檔案的最上方加入 @ModelType 陳述式,即可指定檢視預期的物件類型。 在您建立電影控制器時,Visual Web Developer 會在「Index.vbhtml」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 支援:

5_Intellisense

使用 SQL Server Compact

Entity Framework Code First 偵測到,目前取得的資料庫連椄字串指向還不存在的 Movies 資料庫,因此 Code First 已自動建立資料庫。 您可以查看 App_Data 資料夾,驗證是否已建立。 若未看到「Movies.sdf」檔案,請按一下 [方案總管] 工具列中的 [顯示所有檔案] 按鈕,按一下 [重新整理] 按鈕,然後展開 App_Data 資料夾。

SDF_in_SolnExp

按兩下 [Movies.sdf] 以開啟 [伺服器總管]。 然後展開 Tables 資料夾,查看資料庫中已建立的資料表。

注意

如果您按兩下 [Movies.sdf] 後收到錯誤,請確定您已安裝 Visual Studio 2010 SP1 Tools for SQL Server Compact 4.0。 (如需軟體連結,請參閱本教學課程系列第 1 部分的必要條件清單)。如果您現在安裝版本,則必須關閉並重新開啟 Visual Web Developer。

DB_explorer

有兩個資料表,一個用於 Movie 實體集,還有一個是 EdmMetadata 資料表。 Entity Framework 會使用 EdmMetadata 資料表判斷模型和資料庫的同步時機。

以滑鼠右鍵按一下 Movies 資料表,然後選取 [顯示資料表資料] 查看您建立的資料。

MoviesTable

以滑鼠右鍵按一下 Movies 資料表,然後選取 [編輯資料表結構描述]

EditTableSchema

TableSchemaSM

請注意 Movies 資料表的結構描述如何對應至您稍早建立的 Movie 類別。 Entity Framework Code First 會根據您的 Movie 類別自動建立此結構描述。

完成後,請關閉連線。 (若未關閉連線,下次執行專案時可能會發生錯誤)。

CloseConnection

您現在已有資料庫,以及簡單的清單頁面可顯示內容。 在下個教學課程中,我們會介紹其餘的架構程式碼,並新增 SearchIndex 方法與 SearchIndex 檢視,讓您在此資料庫搜尋電影。