ASP.NET MVC 5 - 将数据从控制器传递给视图
在我們討論數據庫和數據模型之前,讓我們先討論一下如何將數據從控制器傳遞給視圖。控制器類將響應請求來的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”模型。讓我們來創建一個電影數據庫吧。
posted on 2014-04-29 16:18 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/lonelyxmas/p/3699486.html
總結
以上是生活随笔為你收集整理的ASP.NET MVC 5 - 将数据从控制器传递给视图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scrum敏捷开发沉思录
- 下一篇: OleDbCommand使用参数应该注意