ViewData、ViewBag、TempData、Session的区别与联系

ViewData、ViewBag、TempData、Session介绍

ViewBag是对ViewData的封装,其内部是使用ViewData实现数据存储的,不同的是,ViewBag可以存储动态类型的变量值, 而ViewData只能存储String Key/Object Value字典数组。

TempData也是一个String Key/Object Value字典数组。 和ViewData与ViewBag不同的是其所存储的数据对象的生命周期。如果页面发生了跳转,ViewBag和ViewData中的值将不复存在, 但是TempData中的值依然还在。

Session也是一个String Key/Object Value字典数组。但是,Session是存储在服务端的内存中或数据库(各个Web服务器处理方式不同),所以它的生命周期是最长的。

ViewData

ViewData用来从Controller向对应的View传递值,它只在当前的请求中有效,生命周期和View相同,而且它的值不能在多个请求中共享。在重定向后,ViewData中存储的变量值将变为null,而在取出ViewData中的变量值时,必须进行合适的类型转换(隐式或显式)和空值检查。

ViewBag

ViewBag是一个动态类型变量,这是C# 4.0引入的新特性,变量类型会在运行时进行解析, 它基本上是ViewData的包装,也是用来从Controller向View来传递值的,和ViewData一样,ViewBag也只在当前的请求中有效,并且在重定向后,ViewBag中存储的变量值也将变为null。因为ViewBag是动态类型,所以我们在取得其值时,不需要进行类型转换。

TempData

TempData是一个继承自TempDataDictionary类的字典对象,它默认情况下是基于Session存储机制之上的,它是用来在多个Actions或从当前请求向子请求, 页面发生了重定向时传递共享数据。TempData只有在目标视图完全加载后才有效,而在取出TempData存储的变量值时,必须进行合适的类型转换(隐式或显式)和空值检查。

Session

Session也是ASP.NET MVC程序传递值的一种方式,但与TempData不同,用户的整个会话中Session都不会过期,在同一用户会话过程中的所有请求中有效,比如,刷新页面,Session中的值也需要进行类型转换(隐式或显式)和非空检查。

传递方式的生命周期
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值