ViewData,ViewBag,TempData的区别

MVC中有常用的有ViewData,ViewBag,TempData当然还有Session。

1、ViewBag与ViewData的相同点

1、都可以用于Controller到View传递信息。
2、保存时间都是短暂的,当发生重定向或者跳转之后相应的信息都会不存在。

2、ViewBag与ViewData的不同点

1、ViewData是一个字典对象类型(dictionary),它是ViewDataDictionary的子类,键值为字符串。
2、ViewBag是一个dynamic属性,dynamic是C# 4.0新增加的,ViewBag可以充分利用C# 4.0 dynamic的特性。
3、ViewData如果是存储的复杂类型的对象,在前台使用的时候需要类型转换,然后在调用其方法或者属性的时候是要加上是否为null检查,不然当为null时会报错。
4、ViewBag不需要空null检查,但是如果是复杂类型对象,要调用里面的方法或者属性也要进行类型转换。

3、TempData

TempData也是一个字典类型,继承于TempDataDictionary类,TempData与ViewBag,ViewData最大的区别是变量的存在的生命周期。当我们的在Controller或Action之间跳转的时候,TempData可以帮我们保存数据信息,而这些ViewTag和ViewData是做不到的。TempData和ViewData一样在前台使用的时候需要类型转换,然后在调用其方法或者属性的时候是要加上是否为null检查,不然当为null时会报错。

ViewData 只在当前 Action 中有效,生命周期和 View 相同;

TempData  的数据至多只能经过一次Controller传递,并且每个元素至多只能被访问一次,访问以后,自动被删除。

TempData  一般用于临时的缓存内容或抛出错误页面时传递错误信息,可以将TempData 在使用之前存储到相应的 ViewData 中以备循环使用。从TempData中通过索引器取值后,可以通过Keep或Peek方法,将该临时数据保留不删除。如果tempdata使用后还想供下一个请求使用,可以通过调用TempData.Keep()TempData.Keep("key")保留至下一次请求。还可以通过TempData.Peek()读取,这种方式同样会保留至下一次请求。

Session和TempData是key、value形式的字典类型,但是它的周期比较长,是网站会话级别的,当Session设置了值,如果没有到期或者清空key,就可以在接下来的所有页面使用。好处是Session存储的地方也可以根据自己的需要存储到内存或数据库。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值