Asp.net Core中控制器到视图的传值一共有四种:
- ViewData
- ViewBag
- Model
- Session
ViewData
ViewData是以键值的方式存储数据;
- 控制器中存储数据到VIewData中
public IActionResult Index()
{
Human human = new Human()
{
Name = "张三",
Age = 29,
Email = "zhangsan@163.com"
};
ViewData["Type"] = "ViewData";
ViewData["Human"] = human;
return View();
}
- 视图中根据键获取内容
@using AspNetCore6.PracticalDemo.Models;
@{
var ViewDataHuman = ViewData["Human"] as Human;(Context.Session.GetString("HumanSession"));
}
<h1>@ViewData["Type"] 传值</h1>
<div class="card-group bg-light">
姓名:@ViewDataHuman.Name
<br />
年龄:@ViewDataHuman.Age
<br />
Email:@ViewDataHuman.Email
<br />
</div>
ViewBag
ViewBag是通过类似于对象以属性的方式进行数据存储
- 控制器中存储数据到ViewBag中
public IActionResult Index()
{
Human human = new Human()
{
Name = "张三",
Age = 29,
Email = "zhangsan@163.com"
};
ViewBag.Type= "ViewBag";
ViewBag.Human= human;
return View();
}
- 视图中根据对应属性获取内容
@using AspNetCore6.PracticalDemo.Models;
@{
var ViewBagHuman = ViewBag.Human as Human;
}
<h1>@ViewBag.Type 传值</h1>
<div class="card-group bg-light" >
姓名:@ViewBagHuman.Name
<br />
年龄:@ViewBagHuman.Age
<br />
Email:@ViewBagHuman.Email
<br />
</div>
Model
Asp.net Core中的视图为强类型视图,通过@model 可以获取控制器中传递的实体对象。
- 控制器中将数据通过参数传递到视图中
public IActionResult Index()
{
Human human = new Human()
{
Name = "张三",
Age = 29,
Email = "zhangsan@163.com"
};
return View(human );
}
- 视图中根据@Model获取对象内容,@model为具体实体类型
@model AspNetCore6.PracticalDemo.Models.Human;
<h1>Model 传值</h1>
<div class="card-group bg-light">
姓名:@Model.Name
<br />
年龄:@Model.Age
<br />
Email:@Model.Email
<br />
</div>
Session
通过键值的形式将数据存储到Session中,如果值为引用类型,则需要进行序列化
- 注入服务
builder.Services.AddSession();
- 添加中间件
app.UseSession();
- 控制器中将数据存储到Session对象中
public IActionResult Index()
{
Human human = new Human()
{
Name = "张三",
Age = 29,
Email = "zhangsan@163.com"
};
HttpContext.Session.SetString("Type", "Session");
if (string.IsNullOrWhiteSpace(this.HttpContext.Session.GetString("HumanSession")))
{
base.HttpContext.Session.SetString("HumanSession", Newtonsoft.Json.JsonConvert.SerializeObject(human));
}
return View();
}
- 视图中获取内容
@using AspNetCore6.PracticalDemo.Models;
@{
var sessionType = Context.Session.GetString("Session");
var SessionHuman = Newtonsoft.Json.JsonConvert.DeserializeObject<Human>(Context.Session.GetString("HumanSession"));
}
<h1>@sessionType 传值</h1>
<div class="card-group bg-light">
姓名:@SessionHuman.Name
<br />
年龄:@SessionHuman.Age
<br />
Email:@SessionHuman.Email
<br />
</div>