控制器向檢視傳遞資料的3種方式
阿新 • • 發佈:2019-01-06
僅供自己學習用:
在ASP.NET MVC中,控制器和檢視之間的資料傳遞包括兩個方向:
- 將控制器設定的資料傳遞到檢視中,在檢視中顯示資料;
- 將檢視中的資料傳遞到控制器 中,在控制器中讀取、處理資料。
今天先給大家講講控制器向檢視傳遞資料:
控制器向檢視傳遞資料ASP.NET框架中可以通過3種方式將資料從控制器傳遞到檢視。
1. 使用 ViewData 傳遞資料在ASP.NET MVC框架中,所有的控制器必須繼承Controller類,該類是ControllerBase的之類。根據ControllerBase類中的ViewData屬性,可以在控制器的相關動作方法中設定檢視資料字典的值(ViewDataDictionary)
{
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>
網站地址:@(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種方式。下次將會給大家分享檢視向控制器提交資料的幾種方式。