關於控制器與檢視之間引數傳遞
阿新 • • 發佈:2021-04-27
一. Controller 向View傳遞引數
1. ViewData
//底層原始碼中ViewData的定義如下 ControllerBase類中的屬性
public ViewDataDictionary ViewData {get;set;}
ViewData本身是ViewDataDictionary字典型別
public class ViewDataDictionary: IDictionary<string,object>{}
ViewData中存放的是鍵值對資料。ViewData只在一次HTTP請求中有效,當這次請求結束後會自動清空其值。
語法使用如下:
//使用ViewData從控制器傳遞文字資料到檢視
ViewData[ "Message"] = "這裡是我要傳遞的資料";
View 取值
<body>
<h1> @ViewData["Message"] </h1>
<body>
2. ViewBag
[Dynamic]
public ynamic ViewBag{ get; }
dynamic 型別的變數都會編譯為object型別的變數,dynamic只存在於編譯時刻。
使用語法如下:
ViewBag.Name = "李四";
取值
<body> <h1> @ViewBag.Name </h1> <body>
3. TempData
ViewData屬性與ViewBag屬性無法跨Action()方法傳遞資料,當需要在Action()方法之間傳遞資料時,可採用TempData屬性。
HomeController.cs 程式碼:
TempData["Message"] = "TempData傳遞資料";
/Views/home/index.cshtml 程式碼:
<a href="/home/about"></a>
/Views/home/about.cshtml 程式碼:
<body>
<h1> @TempData[ "Message"] </h1>
<body>
TempData可以跨檢視傳遞
控制器每次從Session中獲取TempData後,就會清楚Session中的TempData資料。每次請求結束後TempData的生命週期同時結束。
二. View向Controller傳遞引數
.cshtml 程式碼
Controller 程式碼