.NET MVC中的ViewData、ViewBag和TempData

一、ViewBag和ViewData的定义

public dynamic ViewBag { get; }  
public ViewDataDictionary ViewData { get; set; }  
public dynamic ViewBag { get; }
public ViewDataDictionary ViewData { get; set; }

二、ViewBag和ViewData的区别

viewdataviewbag
它是key/value字典集合它是dynamic类型对象
从asp.net mvc1就有了从asp.netmvc3才有
基于asp.netframework 3.5基于asp.net framework4.0
viewdata比viewbag快viewbag比viewdata慢
页面查询数据时需要转换合适的类型在页面查询数据时不需要转换合适的类型
有一些类型转换代码可读性较好

ViewBag不再是字典的键值对结构,而是dynamic动态类型,它会在程序运行的时候动态解析。

ViewBag.NumberObjs = new string[] { "one", "two", "three" };
          ViewData["NumberArrs"] = new string[] { "one", "two", "three" };

          //正确,dynamic类型的解析作用,foreach可以使用
          foreach (var item in ViewBag.NumberObjs)
           {

            }
            //错误:foreach语句不可作用于object类型对象上
           foreach (var item in ViewData["NumberArrs"])
            {

            }

1、ViewBag其实本质就是ViewData,只是多了层Dynamic控制。所以,使用何种方式完全取决于你的个人爱好。

2、ViewBag和ViewData仅针对当前Action中有效,生命周期和view相同。

三、TempData

      保存在session中,Controller每次执行请求时,会从session中获取tempdata,而后清空session,获取完tempdata数据,虽然保存在内部字典中。但是字典中每个条目访问一次后就从字典中删除。因此Tempdata数据最多只能经过一次controller传递,并且每个元素最多只能访问一次,之后删除。

四、总结

1、ViewData和TempData是字典类型,赋值方式用字典方式,ViewData["myName"] 

2、ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName

3、ViewBag和ViewData只在当前Action中有效,等同于View

4、TempData可以通过转向继续使用,因为它的值保存在Session中。但TempData只能经过一次传递,之后会被系统自动清除

5、ViewData和ViewBag中的值可以互相访问,因为ViewBag的实现中包含了ViewData

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值