在我們討論數據庫和數據模型之前,讓我們先討論一下如何將數據從控制器傳遞給視圖。控制器類將響應請求來的URL。控制器類是給您寫代碼來處理傳入請求的地方,并從數據庫中檢索數據,并最終決定什么類型的返回結果會發送回瀏覽器。視圖模板可以被控制器用來產生格式化過的HTML從而返回給瀏覽器。
控制器負責給任何數據或者對象提供一個必需的視圖模板,用這個視圖模板來Render返回給瀏覽器的HTML。最佳做法是:一個視圖模板應該永遠不會執行業務邏輯或者直接和數據庫進行交互。相應的,一個視圖模板應該只和控制器所提供的數據進行交互。維持這種"隔離關系"可以幫助,保持代碼的干凈、測試性和更易維護。
當前, HelloWorldController
類中Welcome
操作方法需要一個name
和一個numTimes
參數,然后直接輸出給瀏覽器。相比只返回一個字符串,讓我們來改變控制器,來使用視圖模板吧。視圖模板將生成動態的HTML,這意味著您需要通過適當的方式把數據從控制器傳遞給視圖,從而才能生成動態的HTML。您可以把視圖模板需要的動態數據 (參數)在控制器中放入到一個ViewBag
對象中,然后視圖模板可以訪問這個對象。
打開HelloWorldController.cs文件,更改 Welcome
方法,將Message
和NumTimes
的值添加到 ViewBag對象里。ViewBag
是一個動態的對象,這意味著在您沒有給ViewBag
放置屬性時,它沒有任何屬性,您可以把任何您想放置的對象放入到 ViewBag
對象中。 ASP.NET MVC model binding system 會自動將地址欄中URL里的 query string映射到您方法中的參數(name
和numTimes
)。
完整的HelloWorldController.cs文件如下所示:
using System.Web; using System.Web.Mvc; namespace MvcMovie.Controllers { public class HelloWorldController : Controller { public ActionResult Index() { return View(); } public ActionResult Welcome(string name, int numTimes = 1) { ViewBag.Message = "Hello " + name; ViewBag.NumTimes = numTimes; return View(); } } }
現在ViewBag
對象包含了數據,并將自動傳遞給視圖模板。 接下來,您需要一個歡迎視圖模板 !在生成菜單中,選擇生成 MvcMovie (快捷鍵 Ctrl+Shift+B) ,以確保項目編譯成功。
在Views\HelloWorld文件夾上,右鍵單擊”添加(視圖)”,選擇”MVC 5 View Page with (Layout Razor).”
在 “指定項名稱 (Specify Name for Item )” 對話框, 輸入” Welcome”, 點擊“確定(OK)”.
在“選擇布局(the Select a Layout Page)”對話框,接受缺省的”布局_Layout.cshtml”,并點擊“確定(OK)”.
MvcMovie\Views\HelloWorld\Welcome.cshtml文件創建成功。
在Welcome.cshtml文件里替換標記, 您將創建一個循環,循環說多次“Hello”。
下面顯示了完整的Welcome.cshtml文件。
@{ ViewBag.Title = "Welcome"; } <h2>Welcome</h2> <ul> @for (int i = 0; i < ViewBag.NumTimes; i++) { <li>@ViewBag.Message</li> } </ul>
運行應用程序,并瀏覽下面的 URL : http://localhost:xx/HelloWorld/Welcome?name=Scott&numtimes=4
現在,模型綁定(model binder) 使得數據從URL傳遞給控制器。控制器將數據裝入到ViewBag
對象中,通過該對象傳遞給視圖。然后視圖為用戶生成顯示所需的HTML。
在上面的示例中,我們使用了ViewBag
對象把數據從控制器傳遞給了視圖。在本系列教程后面的文章中,我們將使用視圖模型來將數據從一個控制器傳遞到視圖中。用視圖模型來傳遞數據,這一般是首選的辦法。Blog Dynamic V Strongly Typed Views 有更加詳細的介紹。
到這里,這是一種"M"模型,但不是數據庫的那種“M”模型。讓我們來創建一個電影數據庫吧。
學習了本節內容,才能更好的理解數據是如何從控制器傳遞到視圖顯示的。在掌握這些MVC知識的同時,也可以借助一些開發工具來幫助開發過程。ComponentOne Studio ASP.NET MVC 這款輕量級控件能與Visual Studio無縫集成,完全與MVC6和ASP.NET 5.0兼容,將大幅提高開發效率。
-----------------------------------------------------------------------------------------
《ASP.NET MVC 5 入門指南》12篇文章匯總如下:
4. ASP.NET MVC 5 - 將數據從控制器傳遞給視圖
6. ASP.NET MVC 5 - 創建連接字符串(Connection String)并使用SQL Server LocalDB
8. ASP.NET MVC 5 - 驗證編輯方法(Edit method)和編輯視圖(Edit view)
9. ASP.NET MVC 5 - 給電影表和模型添加新字段
10. ASP.NET MVC 5 - 給數據模型添加校驗器
11. ASP.NET MVC 5 - 查詢Details和Delete方法
12. ASP.NET MVC 5 - 使用Wijmo MVC 5模板1分鐘創建應用
希望這些文章對感興趣的朋友有所幫助,另附上PDF版的匯總文檔:
《ASP.NET MVC 5 入門指南》PDF版
相關閱讀:
微軟 Build 2017 開發者大會:Azure 與 AI 的快速發展
文章列表