概述
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存储的地方也可以根据自己的需要存储到内存或数据库。
最后
以上就是害怕小馒头为你收集整理的ViewData,ViewBag,TempData的区别的全部内容,希望文章能够帮你解决ViewData,ViewBag,TempData的区别所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复