ViewBag 和 ViewData 的用法和区别

 所谓的ViewBag是asp.net mvc3 中对ViewData 的 一种动态封装,用法更方便。它赋值的方法:ViewBag.Name = “jack”;其实ViewBag[“Name”] 和ViewData.name是一样的效果,只是方法不一样。

ViewData 是一个特殊的字典类的名称,我们可以用标准语法进行修改或赋值,比如:
ViewData[“Name”] = “jack”;
区别在于:用ViewBag来代替ViewData使用着更快捷,但是相对于ViewData来说,ViewBag还有一些不能用的地方,

  1. ViewBag 要访问的必须是一个有效的标识符,否则无效,比如:ViewData[“Query Income”] 就不能使用ViewBag 来访问。因为“Query Income”中有无效的C#标识符空格。
  2. 动态值不能作为一个参数传递给扩展方法。因为 C#为了选择正确的扩展方法规定必须标明每一个参数的类型。如果参数中有任何一个参数是动态的就无法通过编译。
    比如: @Html.TextBox(“Name”,ViewBag.Name)就会编译失败。
    解决方法便是 1. 将ViewBag.Name 替换为ViewData[“Name”];
  3. 把ViewBag.Name 替换为一个具体类型的参数:(string)ViewBag.Name;
    其实在ASP.NET.MVC 中,页面间和Controller与View之间主要有4种小量数据传值方式,ViewData、ViewBag、TempData、Session 变量。那我们该如何使用。请看下面讲解
    上面的四种方法中,ViewData 和ViewBag其实是一回事,ViewBag其实是对ViewData的封装,其内部其实是使用ViewData实现数据存储的。所以我们可以将这四种方法归为三大类,ViewData和ViewBag,TemData, Seesion;
    代码如下:
ViewData[“Message”] = “Hello ASP.NET MVC”;
Or
ViewBag.Message = “Helllo ASP.NET MVC”;

ViewBag和ViewData存储的值的什么周期只有在从Controller到View中,而TempData中的数据不仅在从Controller到Vie中有效,在不同的Action之间或者从一个页面跳转到另一个页面后才有效。
Session其实和ViewData类型,也是一个String key/Object Value 字典数组、但是,Session是存储在客户端的Cookies中,所以他的生命周期是最长的。但是,正因为其存储的客户端,所以必须确保没有敏感机密的信息存储其中。
最后对每种方法进行总结:

  1. ViewData是一个继承来自ViewDataDictionary类的Dictionary对象。
  2. 用来从Controller向对应的View传递值。
  3. 只能在当前的请求中有效,生命周期和View相同,其值不能再多个请求中共享。
  4. 在重定向redirection后,ViewData中存储的变量值将变为null。
  5. 在取出ViewDaata中的变量值是,演示一下如何使用ViewData来从Controller向View传值。
    ViewBag 是一个动态类型变量,基本是ViewData的包装,也是用来Controller向View来传递值的。在重定向后,ViewBag中存储的变量值将变为null,因为ViewBag是动态类型,所以我们在取得其值时,不需要进行类型转换。
    TempData 是一个继承TempDataDictionary类的字典对象,它默认情况下是基于Session存储机制之上的。用来在多个Action是或当期请求向子请求,页面发送重定向时传递共享数据。只有在目标视图完全加载才有效,在取出TempData存储的变量值时,必须进行合适的类型装换和空值检查。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值