一、控制器向視圖傳值(一)
1、控制器向視圖傳遞數據,常見三種爲:
1) ViewData
2) ViewBag
3) TempData
其中ViewData與ViewBag爲同一集合,僅存在語法上的差異。
2、ViewData:
只在一次HTTP請求中有效,當請求結束後會自動清空其值;生命週期短,類似WebForm的Page對象,因此無法跨Action方法傳遞數據。
3、TempData:
TempData利用Session保存數據;生命週期長,可以跨Action方法傳遞數據,但讀取一次後會自動清除。
4、ViewBag:
ViewBag屬性返回的實際類型爲ExpandoObject,此類型允許動態添加成員,因此將返回類型定義爲dynamic可以避免編譯期的語法檢查。
二、控制器向視圖傳值
1、ViewDataDictionary集合的元素類型爲object,所以可以把實體對象集合放入ViewData對象或ViewBag對象中傳遞至View視圖頁。
2、Action中的View()方法可以接受object數據,所以也可以把實體對象集合傳遞至View視圖頁,通過視圖的Model屬性取回。
三、視圖傳值到控制器
1、ASP.NET MVC的底層框架是ASP.NET,因此以前學習過的系統對象仍然可以使用。
2、視圖傳值到控制器
1)視圖以GET方式提交的數據,在Action方法中通過Request對象的QueryString集合獲取
2)視圖以POST方式提交的數據,在Action方法中通過Request對象的Form集合獲取
3、當分別以get、post兩次請求同名Action時,post對應的Action必須以[HttpPost]修飾。
四、綜合案例
1、多種傳值方式的應用場景:
1)ViewData:適合傳遞單個數據,需要類型轉換
2)ViewBag:適合傳遞單個數據,不需要類型轉換
3)TempData:主要用於跨多個動作方法傳遞數據
4)View()方法傳參:適合傳遞模型數據,強類型視圖中不需要類型轉換