起飛網 ASP.NET MVC 5 學習教程目錄:
- 添加控制器
- 添加視圖
- 修改視圖和布局頁
- 控制器傳遞數據給視圖
- 添加模型
- 創建連接字符串
- 通過控制器訪問模型的數據
- 生成的代碼詳解
- 使用 SQL Server LocalDB
- Edit方法和Edit視圖詳解
- 添加查詢
- Entity Framework 數據遷移之添加字段
- 添加驗證
- Details 和 Delete 方法詳解
在討論數據庫和模型之前,讓我們先說說容控制器傳遞數據給視圖。控制器類在響應傳入的請求時被調用,控制器類是你寫代碼處理瀏覽器請求、從數據庫中檢索數據、並最終決定發送什么類型的響應給瀏覽器。視圖模板被控制器用來生成和格式化HTML響應給瀏覽器。
控制器的責任是為視圖模板提供必須的數據或對象,用來繪制HTML響應瀏覽器。一個最佳實踐是:視圖模板從來不參與業務邏輯,或直接與數據庫交互。相反的,視圖模板僅與控制器提供的數據一起工作。保持這種“關注點分離(separation of concerns)”有助於保持代碼的整潔,可測試性和更容易維護。
目前,HelloWorldController 類中的 Welcome 方法需要兩個參數:name 和 numTimes,然后直接與將值輸出給瀏覽器。讓我們修改控制器,使用視圖來替換直接相應string字符串。視圖模板會生成一個動態響應,這意味着你需要通過控制器傳遞一些數據用來生成響應。要做到這些,你需要通過在控制器中將數據(參數)放到ViewBag對象中,視圖可以訪問ViewBag對象。
回到 HelloWorldController.cs 文件中,修改Welcome方法,在ViewBag對象中添加一個Message和NumTimes值。ViewBag是dynamic 類型的對象,你可以為它添加任何你想要的數據,ViewBag對象在你添加數據之前,不具有任何屬性。ASP.NET MVC 模型綁定系統從地址參數中自動映射命名的參數(name 和 numTimes)到方法中。完整的HelloWorldController.cs文件如下:
代碼清單1: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對象已經包含了數據,它會被自動傳遞給視圖。
接下來,你需要一個Welcome視圖模板。在生成菜單中,選擇生成解決方案(或使用快捷鍵 CTRL+SHIFT+B)確定項目已經編譯了。
在Views\HelloWorld 文件夾右鍵,選擇“添加”>“支架”:
圖1:添加視圖菜單
在添加支架對話框中,選擇“MVC 5 View - Empty without model”。
圖2:添加支架對話框
在Add View對話框中,將視圖命名為Welcome
圖3:Add View對話框
文件MvcMovie\Views\HelloWorld\Welcome.cshtml 已經創建好了。
在文件Welcome.cshtml 的<h2>
元素下添加如下的代碼,完整的代碼如下:
@{ ViewBag.Title = "Welcome"; } <h2>Welcome</h2> <ul> @for (int i = 0; i < ViewBag.NumTimes; i++) { <li>@ViewBag.Message</li> } </ul>
運行應用程序,在瀏覽器中查看如下地址:
http://localhost:xx/HelloWorld/Welcome?name=Scott&numtimes=4
現在數據從URL取出來,通過模型綁定傳遞給控制器,控制器將數據封裝在ViewBag對象中,傳遞給視圖,然后視圖將數據以HTML的方式呈現給用戶。
圖4:Welcome視圖
在上面的例子中,我們使用ViewBag對象將數據從控制器傳遞給視圖。在家下來的章節中,我們會使用視圖模型來傳遞數據。使用視圖模型傳遞數據比用ViewBag要好得多。
這也是模型“M”的一種,但並沒有使用數據庫。我們接下來要學習的是創建一個數據庫,創建一個真正意義的視圖模型。
本文轉自起飛網,原文地址:http://www.qeefee.com/mvc/mvc-5-passing-data-from-the-controller-to-the-view