原文:
在本節中,您将建立一個新的<code>moviescontroller</code>類,并在這個controller類裡編寫代碼來取得電影資料,并使用視圖模闆将資料展示在浏覽器裡。
在開始下一步前,先build一下應用程式(生成應用程式)(確定應用程式編譯沒有問題)
在解決方案上,用滑鼠右鍵單擊controller檔案夾,點選新增,再選擇controller。
在scaffold新增對話框,選擇mvc
5 controller with views, using entity framework,
點選新增。
· 控制器(controller)名稱輸入:
moviescontroller.
· 模型類(model class)選擇: movie
(mvcmovie.models) .
· 資料上下文類(data context
class)選擇:moviedbcontext (mvcmovie.models)
下圖顯示了完成的對話框。
單擊添加(如果你得到一個錯誤,則很可能增加控制器前,沒有生成該應用程式)。visual
studio express 會建立以下檔案和檔案夾:
·
項目控制器檔案夾中的moviescontroller.cs檔案。
· 項目視圖檔案夾下的 movie檔案夾。
· 在新的views\movies檔案夾中建立create.cshtml、
delete.cshtml、 details.cshtml、 edit.cshtml和index.cshtml
檔案。
visual studio自動建立 (建立、
讀取、 更新和删除) 操作方法,和相關的視圖檔案(crud 自動建立的操作方法和視圖檔案被稱為 scaffolding)。
現在您有了可以建立、清單、 編輯和删除電影entity 所有的web功能了。
運作應用程式,通過将/movies追加到浏覽器位址欄
url的後面,進而浏覽movies控制器。因為應用程式依賴于預設路由 ( app_start\routeconfig.cs
檔案中的定義),浏覽器請求http://localhost:xxxxx/movies将被路由到<code>movies</code>控制器預設的<code>index</code>
操作方法。換句話說,浏覽器請求http://localhost:xxxxx/movies等同于浏覽器請求http://localhost:xxxxx/movies/index。因為您還沒有添加任何内容,是以結果是一個空的電影清單。
建立電影
點選create
new連結。輸入有關電影的一些詳細資訊,然後單擊create按鈕。
注意:您可能無法在“價格”字段中輸入小數點或逗号。要支援非英語語言環境,小數點用逗号(","),和非美國英語的日期格式的jquery驗證,你必須包括globalize.js,和你的具體文化/
globalize.cultures.js的檔案(從)和javascript使用globalize.parsefloat的。在接下來的教程中,我将展示如何做到這一點。現在,隻需輸入整數,如10。
單擊create按鈕将使得窗體送出至伺服器,同時電影資訊也會儲存到資料庫裡,然後您會被重定向到/movies
的url,您可以在清單中看到剛剛建立的新電影。
建立一些更多的電影資料(movie entries)。
同時也可以嘗試點選編輯、詳細資訊和删除功能的連結。
打開controllers\moviescontroller.cs檔案,并找到生成的<code>index</code>方法。一部分電影控制器和<code>index</code>方法如下所示。
public
class moviescontroller : controller { private moviedbcontext db = new moviedbcontext();
//
get: /movies/public actionresult index() { return
向<code>movies</code>控制器請求,進而傳回<code>movies</code>電影資料庫表中的所有記錄,然後将結果傳遞給<code>index</code>視圖。下面是moviescontroller類中執行個體化電影資料庫上下文執行個體,如前面所述。電影資料庫上下文執行個體可用于查詢、
編輯和删除的電影。
private
moviedbcontext db = new
moviedbcontext();
在本系列前面教程中,您看到了使用<code>viewbag</code>對象,從控制器傳遞資料或對象給視圖模闆。<code>viewbag</code>是一個動态的對象,提供了友善的後期綁定(late-bound)方法将資訊傳遞給視圖。
mvc 還提供了傳遞強類型對象(strongly typed
objects)到視圖模闆的能力。這種強類型使得更好的在編譯時檢查您的代碼, 并在visual studio 編輯器中提供更加豐富的()。
當建立操作方法和視圖時, visual studio
中的scaffolding機制(也就是通過一個強類型的模型)使用了<code>moviescontroller</code>類和視圖模闆。
在controllers\moviescontroller.cs檔案中看一下生成的<code>details</code>方法。電影控制器裡的<code>details</code>方法如下所示。
actionresult details(int? id) { if (id == null) { return new
httpstatuscoderesult(httpstatuscode.badrequest); } movie movie
=
db.movies.find(id); if (movie
== null) { return httpnotfound(); } return
id參數一般是通過路由資料傳遞. 例如 會設定電影控制器的控制,該方法操作details并設定id為1。 你也可以通過一個查詢字元串(query
string) 的id如下: http://localhost:1234/movies/details?id=1
如果查找到了一個<code>movie</code>,<code>movie</code>
模型的執行個體會傳遞給detail視圖。
return
view(movie);
看一下views\movies\details.cshtml檔案裡的内容。
@model
mvcmovie.models.movie @{ viewbag.title = "details"; } <h2>details</h2> <div> <h4>movie</h4> <hr /> <dl class="dl-horizontal">
<dt>
</dt>
</dl> </div> <p>
</p>
通過引入視圖模闆檔案頂部的<code>@model</code>語句,您可以指定該視圖期望的對象類型。當您建立電影控制器時,visual
studio 會将<code>@model</code>聲明自動包含到details.cshtml檔案的頂部:
mvcmovie.models.movie
此<code>@model</code>聲明使得控制器可以将強類型的<code>model</code>對象傳遞給view視圖,
進而您可以在視圖裡通路傳遞過來的強類型電影model。
例如,在details.cshtml模闆中,每部電影的字段,通過代碼傳遞了<code>displaynamefor</code>
和 html
helper通過強類型的<code>model</code>對象。create和edit方法還有視圖模闆都在傳遞電影的強類型模型對象。
看一下index.cshtml視圖模版和moviescontroller.cs中的<code>index</code>
方法。請注意這些代碼是如何在i<code>ndex</code>操作方法中,建立對象,并調用<code>view</code>方法的。
此代碼在控制器中傳遞<code>movies</code>清單給視圖:
當您建立電影控制器時,visual studio會自動包含
<code>@model</code>語句到index.cshtml檔案的頂部
@model ienumerable<mvcmovie.models.movie>
此<code>@model</code>聲明使得控制器可以将強類型的電影清單<code>model</code>對象傳遞給view視圖。例如,在index.cshtml模闆中,在強類型的<code>model</code>對象上使用<code>foreach</code>語句循環周遊電影清單:
@foreach (var item
in model) { <tr> <td>
</td> <td>
</td> <th>
</th> <td>
</td> </tr>
因為<code>model</code>對象是強類型的
(是<code>ienumerable<movie></code>對象),是以在循環中的每個<code>item</code>對象的類型是<code>movie</code>類型。好處之一是,這意味着您可以在代碼編譯時進行檢查,同時在代碼編輯器中支援更加全面的智能感覺:
entity framework code
first(代碼優先),如果檢測到不存在一個資料庫連接配接字元串指向了<code>movies</code>資料庫,會自動的建立資料庫。在app_data檔案夾中找一下,您可以驗證它已經被建立了。如果您看不到movies.mdf檔案,請在解決方案資料總管工具欄上,單擊顯示所有檔案按鈕,單擊重新整理按鈕,然後展開app_data檔案夾。
輕按兩下movies.mdf打開資料庫資料總管(server
explorer),然後展開表檔案夾(tables) 以檢視電影表。
注意:id旁邊的鑰匙圖示。預設情況下,ef将建立一個名為id的主鍵。欲了解更多ef和mvc資訊,請參閱tom
dykstra‘s的優秀教程。
在movies表上單擊滑鼠右鍵,并請選擇顯示表資料(show table
data)看您所建立的資料。
在movies表上單擊滑鼠右鍵,并請選擇打開表定義(open table
definition), 您将看到entity framework code first建立的表結構。
注意事項:
movies表映射到movie類的架構(schema)如何你前面建立的。entity framework code
first首先自動為您創造了這個架構(schema)基于movie class。當您完成後,通過右擊moviedbcontext,并選擇關閉連接配接。
(如果你不關閉連接配接,下一次運作項目,你可能會得到一個錯誤)。
現在,您可以在這個簡單清單頁面裡:顯示、編輯、更新、删除資料庫裡的資料了。在下一次的教程中,我們會繼續看看scaffolded自動生成的其它代碼。并添加一個<code>searchindex</code>方法和<code>searchindex</code>視圖,使您可以在資料庫中搜尋電影了。更多關于entity
framework with mvc, see .