一. 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 代码