Asp.net Core控制器到视图的传值方式

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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虫子不吃鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值