【翻譯】ASP.NET MVC4 入門(五)在Controller中訪問Model的資料

來源:互聯網
上載者:User

原文連結:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-data-from-a-controller

在這一小節,我們將會建立一個新的MoviesController類並且寫代碼來檢索movie有關的資料,最後使用視圖模板來進行展示。

在繼續下一步之前,然我們先將程式產生以下。

按右鍵Controllers檔案夾建立一個新的MovieController,如果你沒有先產生一下(按右鍵項目,Build)的話,下面這些選項是不會出現的:

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

點擊“Add”,Visual Studio將會建立如下的檔案和檔案夾:

  • 在項目的Controllers檔案夾下建立MoviesController.cs檔案
  • 在項目的Views檔案夾下建立Movies檔案夾。
  • 在新的Views\Movies檔案夾下建立Create.cshtml,Delete.cshtml,Details.cshtml,Edit.cshtml和Index.cshtml

ASP.NET MVC 4會自動建立CRUD(create,read,update和delete)的action方法和視圖(自動建立crud action和視圖的行為被稱之為scaffolding)。現在我們有了一個完整功能的web應用,可以讓我們對電影資料進行建立,編輯,瀏覽和刪除。

運行程式通過在地址欄的URL後面添加/Movies來訪問MoviesController。因為我們的應用程式依賴於預設的路由規則(定義在Global.asax檔案裡),請求http://localhost:xxxx/Movies時會被自動路由到MoviesController的Index action方法。換句話說,請求http://localhost:xxxx/Movies和請求http://localhost:xxxx/Movies/Index是一樣的。返回的結果是一個空的列表,因為我們現在還沒有任何資料。

建立一個Movie

選擇Create New超連結。輸入一部電影的細節資料然後單擊Create按鈕。

單擊Create按鈕使表單提交到伺服器,伺服器會將movie的資料儲存到資料庫中。然後再次瀏覽/Movies,這次可以看到新添加的資料了。

多建立一些資料,試一試Edit,Details和Delete超連結,這些都是可用的。

來看看產生的程式碼

開啟Controllers\MoviesController.cs檔案來查看一下產生的Index方法。下面展示了MoviesController中的一部分代碼.

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

下面的代碼執行個體化了一個前面提到過的MovieDbContext對象,是movie資料庫的上下文,你可以使用它了查詢,編輯和刪除資料。

private MovieDBContext db = new MovieDBContext();

對MoviesController的請求會返回資料庫中Movies表的所有資料並且將這些資料傳遞到Index的view中。

強型別模型和@model關鍵字

在前面的文章裡,我們知道了一個controller如何通過ViewBag對象來為View模板傳遞資料。ViewBag對象是一個動態對象,可以提供一種方便的,晚期綁定的方式來為view傳遞資料。

ASP.NET MVC同樣提供了為View模板傳遞強型別資料的能力。這種強型別資料提供了更好編譯時間的代碼檢查和Visual Studio的智能提示。scaffolding機制使用了這種方法來建立MoviesController和視圖模板中的方法和view。

在Controllers\MoviesController.cs檔案中查看產生的Details方法,MoviesController中Details方法的代碼如下。

//// GET: /Movies/Details/5 public ActionResult Details(int id = 0) {       Movie movie = db.Movies.Find(id);        if (movie == null)        {             return HttpNotFound();         }         return View(movie); }

如果能找到指定id的資料,一個Movie對象的執行個體就會傳遞給Deatils的視圖。來看一下Views\Movies\Details.cshtml檔案。

通過在視圖模板頂部引入@model語句我們可以指定視圖期望使用的物件類型。當我們建立Moviescontroller的時候,Visual Studio自動在Details.cshtml檔案的頂部包含了下面的語句

@model MvcMovie.Models.Movie

@model指令允許我們通過強型別的的Model對象來訪問Controller傳遞給View的電影資料。例如,在Details.cshtml模板裡,代碼中通過強型別的Model對象向DisplayNameFor和DisplayFor方法傳遞需要的Movie對象的資料。Create和Edit方法還有視圖模板中都是傳遞的Movie類型的Model對象。

讓我們仔細查看一下Index.cshtml和MoviesController.cs裡定義的Index方法裡的內容,注意一下Index方法中的代碼中在調用View方法時是如何建立List對象的,代碼把建立的List對象從controller傳遞到了view。

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

當建立MoviesController的時候,Visual Studio會自動在Index.cshtml頁面頂部添加@model語句

@model IEnumerable<MvcMovie.Models.Movie> 

這條@model指令允許我們通過使用強型別的Model對象訪問controller傳遞給view的資料。例如,在Index.cshtml模板裡,代碼通過一個foreach語句遍曆Model對象。

@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>對象),在foreach迴圈中的item是Movie類型。這就是說我們可以獲得編譯時間安全檢查和VS的智能提示的支援。

與資料庫一起工作

註:原文使用Visual Studio 2012內建的Sql Server LocalDB資料庫,本文使用的是Visual Stuio 2010內建的Sql Server Express

Entity Framework的Code First模式會探測到資料庫連接字串指向了還不存在的Movies資料庫,所以Code First會自動建立這個資料庫。你可以通過查看App_Data檔案夾來驗證這一點。如果你看不到Movies.mdf檔案,單擊方案總管上方工具條中的"Show All Fiels"按鈕,單擊"Refresh"按鈕,然後展開App_Data檔案夾.

雙擊Movies.mdf來開啟資料庫瀏覽器,展開Tables檔案夾來看一下Movie表

按右鍵Movies表選擇"Show Table Data"來查看我們建立的資料

按右鍵Movies表,選擇"Open Table Definition"來看一下Entity Framework Code First來為我們建立的表結構

注意Movies表結構是如何與我們之前建立的Movie類對應起來的。Entity Framework Code First根據Movie類自動建立表結構.

當你完成這些操作的時候,按右鍵資料庫選擇"Close Connection",如果不這麼做的話,下次開啟項目可能會報錯.

現在我們有了一個簡單的頁面來展示資料庫裡的資料了。在下一篇文章裡,我們將會查看剩餘的自動產生的程式碼,並且添加一個SearchIndex方法和一個SearchIndex視圖來尋找資料庫裡的資料。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.