從一個控制器(Controller)存儲您的模型(Model)數據(ASP.NET MVC3系列文章五)

 

 原址:http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/getting-started-with-mvc3-part5-cs

這個教程將會使用Microsoft Visual Web Developer 2010 Express Service Pack 1來教會您構建一個基於ASP.NET MVC Web應用。 在您開始之前,請確保已經安裝了下面羅列的必備條件。您可以點擊接下來的鏈接來下載它們:Web Platform Installer。或者您可以使用下面的鏈接來單個安裝:

如果您使用的是Visual Studio 2010, 可以點擊接下來的鏈接來安裝這些必備條件: Visual Studio 2010 prerequisites.

在這個Visual Web Developer項目中將會全程使用c#. Download the C# version.。如果您比較擅長VB, 可以在這個教程中改爲VB Visual Basic version

 

在這次章節中,您將創建一個新的MoviesController 類並且書寫代碼返回電影數據,最後使用一個視圖(View)模板在瀏覽器中顯示它。在繼續之前,請先確保已經構建了這個(電影)應用。

Controllers文件夾上右鍵,創建一個新的Controller,命名爲MoviesController ,按照下面的選項進行選擇:

  • Controller name: MoviesController. (這個是默認的。 )
  • Template: Controller with read/write actions and views, using Entity Framework.
  • Model class: Movie (MvcMovie.Models).
  • Data context class: MovieDBContext (MvcMovie.Models).
  • Views: Razor (CSHTML). (默認的。)

AddScaffoldedMovieController

單擊Add。Visual Web Developer創建如下文件和文件夾:

在項目的Controllers文件夾中的MoviesController文件。在項目的Views文件夾中的Movies 文件夾。在新的Views\Movies 文件夾中的Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtml, andIndex.cshtml 文件。

NewMovieControllerScreenShot

這個ASP.NET MVC3爲您自動的構建了CRUD(create, read, update, and delete)action方法和視圖(Views)。 您現在擁有了一個對電影進行增加,顯示,修改和刪除的完整Web應用。

啓動這個應用和瀏覽器,向您的瀏覽器地址欄中的URL追加/Movies ,鏈接到Movies控制器(Controller)。在Movies控制器(Controller)中,由於應用是依賴默認的路由(在Global.asax 文件中有定義),所以,這個瀏覽器請求 http://localhost:xxxxx/Movies 是路由到默認的Index的Action方法。換句話說,這個瀏覽器請求http://localhost:xxxxx/Movies 跟請求http://localhost:xxxxx/Movies/IndexIn 達到的效果是一樣的。現在頁面中的電影列表是空的,因爲您還未添加任何數據。

創建一部電影

選擇Create New鏈接,輸入和下面相同的信息,然後單擊Create按鈕。

點擊Create 按鈕將會把表單信息傳遞到服務器,然後將電影信息存儲到數據庫中,然後頁重定向到,/Movies URL,您會發現剛剛創建的電影信息已經出現在列表中。

IndexWhenHarryMet

創建更多的電影,並且嘗試着點擊下Edit, DetailsDelete鏈接。

分析生成的代碼

打開Controllers\MoviesController.cs文件,然後看一下Index方法中生成的代碼。下面展示的是movie控制器(Controller)中Index方法的一部分。

public class MoviesController : Controller 
{ 
    private MovieDBContext db = new MovieDBContext(); 
 
    // 
    // GET: /Movies/ 
 
    public ViewResult Index() 
    { 
        return View(db.Movies.ToList()); 
    }

MoviesController 中的下面一段代碼是實例化movie數據庫的上下文,上一節有說明過。您能夠使用movie數據庫上下文來對電影執行查詢,修改以及刪除操作。

private MovieDBContext db = new MovieDBContext();

一個請求發送到MoviesController中,然後從數據庫中返回所有的電影列表,最後將結果傳送到Index View。

強類型Modes和@model關鍵字

在這次教程的早些時候,您看到了怎麼使用ViewBag對象在控制器(Controller)中來傳送數據或對象到視圖(View)模板中。ViewBag是一個動態對象,這意味着提供了一種延遲綁定的方式來傳遞信息到視圖(View)中。

ASP.NET MVC也提供了傳遞強類型或對象到視圖(View)模板的能力。這個強類型可以在編譯時就檢查代碼的有效性並且在Visual Web Developer 編輯器中提供智能感知。我們將在MoviesController類和Index.cshtml視圖中使用這種傳遞方式。

當在Index Action方法中調出視圖(View)方法幫助器時,注意到這裏是怎麼用代碼創建一個List對象。下面的代碼是在控制器(Controller)中傳遞電影列表:

public ViewResult Index() 
{ 
    return View(db.Movies.ToList()); 
}

在View模板文件頂部,包含了@model聲明,您能指定對象在View中預期的類型 。當您創建了MovieController,Visual Web Developer自動的在Index.cshtml文件中包含了下面的@model聲明:

@model IEnumerable<MvcMovie.Models.Movie> 

這個@model允許您存儲從控制器(Controller)傳遞到視圖(View)模板的強類型實體對象(電影)。例如,在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類型。這麼做的好處是,在編譯時就可以檢查代碼的正確性以及給所有類型提供智能感知。

ModelIntellisene

使用SQL Server Compact

Entity Framework “Code First” 通過數據庫連接字符串,跟至今還沒有創建的Movies數據庫建立關係。所以“Coce First”自動的創建了數據庫,您能在App_Data文件夾中驗證這個數據庫是否已經被創建了。如果您沒有看到Movies.sdf這個文件,請在Solution Explorer 工具欄中單擊Show All Files 按鈕,然後單擊Refresh 按鈕,並且展開App_Data 文件夾。

SDF_in_SolnExp

Server Explorer中,雙擊Movies.sdf 文件,並打開,然後展開數據庫中的Tables 文件夾,您會發現已經創建了一些表。

注意,如果您在雙擊Movies.sdf 時,發生了錯誤,請確保您安裝了SQL Server Compact 4.0  (runtime + tools support).。(要鏈接到軟件下載的鏈接,請看看頂部有關係列教程的必備條件)如果您剛剛已經安裝了,您需要重啓Visual Web Developer。

DB_explorer

這裏有兩個表,一個是用來存放電影的Movies表,一個是EdmMetadata表。這個EdmMetadata表是常常用於當Model和數據庫沒有同步時,Entity Framework初始化數據。

右擊Movies 表選擇Show Table Data,看看您創建的數據。

MoviesTable

右擊Movies 表,然後選擇Edit Table Schema

EditTableSchema

TableSchemaSM

注意下這裏Movies的結構是怎麼映射到早期您創建的Movie類。Entity Framework “Code First”自動的爲您創建了這個基於Movie類的結構。

在結束以後,關閉連接(如果您沒有關閉連接,您可能會在下次啓動項目的時候引起一個錯誤)。

CloseConnection

您現在擁有了一個數據庫和一個簡單的列表頁面用來顯示電影內容。在下次教程中,我們將分析其他的代碼並且創建一個SearchIndex 方法和一個SearchIndex View,以使我們可以在這個數據庫中搜索電影。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章