僅供自己學習用:
在asp.net MVC中,控制器和視圖之間的數據傳遞包括兩個方向:
將控制器設置的數據傳遞到視圖中,在視圖中顯示數據;將視圖中的數據傳遞到控制器 中,在控制器中讀取、處理數據。今天先給大家講講控制器向視圖傳遞數據:控制器向視圖傳遞數據ASP.NET框架中可以通過3種方式將數據從控制器傳遞到視圖。1. 使用 ViewData 傳遞數據在ASP.NET MVC框架中,所有的控制器必須繼承Controller類,該類是ControllerBase的之類。根據ControllerBase類中的ViewData屬性,可以在控制器的相關動作方法中設置視圖數據字典的值(ViewDataDictionary)。例如,在"Home" 控制器的Index()動作方法中,設置ViewData視圖數據字典。namespace Mvcapplication1:Controllers{ public class HomeController:Controller { public ActionResult Index() { ViewData["Name"]="代碼里"; ViewData["Ads"]="www.daimali.com"; ViewData["person"]=new Person{name="李四",sex="男"}; return View(); } }}示例中ViewData字典中保存了2個字符串和一個Person對象。在ViewData中保存數據時都會轉換為Object,因此視圖中顯示ViewData數據時,一般需要進行數據的類型轉換。<html><head></head><body> 站點名稱:@(ViewData["Name"]) 網站地址:@(ViewData["Ads"]) @{ Person person=ViewData["person"] as Person; } 所屬人:@(person.name) 性別: @(person.sex)</body></html>2. 使用TempData傳遞數據 根據ControllerBase類中的TempData屬性,同樣可以在控制器的相關動作方法中設置該TempData屬性的值。例如,在"Home" 控制器的Index()動作方法中,設置TempData視圖數據字典。namespace MvcApplication1:Controllers{ public class HomeController:Controller { public ActionResult Index() { TempData["Name"]="代碼里"; TempData["Ads"]="www.daimali.com"; TempData["person"]=new Person{name="李四",sex="男"}; return View(); } }}視圖中讀取數據:<html><head></head><body> 站點名稱:@(TempData["Name"]) 網站地址:@(TempData["Ads"]) @{ Person person=TempData["person"] as Person; } 所屬人:@(person.name) 性別: @(person.sex)</body></html>通過上述ViewData和TempData的舉例,大家可以看到,用法上完全一樣,只是字面上看起來不一樣而已,但是他們又是完全不同的兩種數據類型。我們來比較一下ViewData和TempData的區別:ViewData的數據類型是ViewDataDictionary類的實例化對象,而TempData的數據類型則是TempDataDictionary類的實例化對象;ViewData 只在當前頁面訪問,無法跨頁傳遞;TempData則保存在session中,可以實現跨頁傳遞,且傳遞一次之后自動刪除。不同點: 1. 類型不同 2. 訪問范圍不同,ViewData當前頁,TempData跨頁 3. 使用次數不同,TempData只能訪問一次 4. 存儲位置不同,TempData存儲在Session中。3. 使用Model傳遞數據 通過在控制器的View()方法中傳遞實例化對象,可以將該對象傳遞到視圖中。HomeController控制器代碼:namespace MvcApplication1:Controllers{ public class HomeController:Controller { public ActionResult Index() { Person person=new Person{name="李四",sex="男"}; return View(person);//傳遞對象 } }}視圖中使用:@model Person<html><head></head><body> 站點名稱:@(TempData["Name"]) 網站地址:@(TempData["Ads"]) @{ Person person=TempData["person"] as Person; } 所屬人:@(Model.name) 性別: @(Model.sex)</body></html>如上,傳遞實例化對象時,控制器將ViewDataDictionary類的實例化對象的Model屬性設置為需要被傳遞的對象;在視圖 中只要讀取Model屬性,就可以獲得控制器中的實例化對象。總結:從控制器向視圖傳遞數據可以使用ViewData,TempTata和Model 3種方式。下次將會給大家分享視圖向控制器提交數據的幾種方式。新聞熱點
疑難解答