所谓的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都不会过期,在同一用户会话的过程中所以请求中有效,比如:刷新页面,当中的值也需要进行类型转换和非空检查。

ViewBag 和 ViewData 的用法和区别相关推荐

  1. ViewBag和ViewData的用法和区别

    ViewBag和ViewData的用法和区别 作者:欧日鑫 撰写时间:2020年8月8日 一.ViewBag的定义 public dynamic ViewBag {get {if (_dynamicV ...

  2. ViewBag、ViewData和TempData使用方法、区别与联系

    一.区别与联系 ViewData 和 TempData 都可以传递弱类型数据,区别如下:TempData 只在当前 Action 中有效,生命周期和 View 相同:保存在Session中,Contr ...

  3. viewBag和viewData区别

    viewBag和viewData区别 viewData: 它是key/value字典集合 从Asp.net mvc1 就有了 基于Asp.net3.5 framework ViwData比ViewBa ...

  4. ViewBag 和 ViewData 的传值

    ViewBag 和 ViewData 的传值 简介:在 ASP.NET MVC 中,页面间和 Controller 与View之间主要有以下几种小量数据传值方式,ViewData. ViewBag.T ...

  5. python 类变量、实例变量、参数、实例方法、类方法、静态方法 的用法和区别

    #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : 类变量.实例变量.参数.实例方法.类方法 ...

  6. ViewBag与ViewData传值乱码问题解决方案

    ViewBag与ViewData传值乱码问题解决方案 参考文章: (1)ViewBag与ViewData传值乱码问题解决方案 (2)https://www.cnblogs.com/mi21/p/121 ...

  7. kmalloc/kfree,vmalloc/vfree函数用法和区别

    kmalloc/kfree,vmalloc/vfree函数用法和区别 1.kmalloc 1>kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零. ...

  8. Javascript:history.go()和history.back()的用法和区别

    Javascript:history.go()和history.back()的用法和区别  简单的说就是:go(-1): 返回上一页,原页面表单中的内容会丢失:back(): 返回上一页,原页表表单中 ...

  9. set和enum类型的用法和区别

    mysql中的set和enum类型的用法和区别 mysql中的enum和set其实都是string类型的而且只能在指定的集合里取值, 不同的是set可以取多个值,enum只能取一个值.   1 2 3 ...

最新文章

  1. 写一个 iOS 复杂表单的正确姿势
  2. matlab实现周期阶跃函数,连续时间信号傅利叶变换与MATLAB实现.doc
  3. haproxy 参数说明
  4. wordvba编程代码大全_面向对象、设计原则、设计模式、编程规范、重构
  5. Linux基本命令 (一)
  6. shiro使用jdbc_realm登录验证
  7. c语言学习-从键盘输入10个字符,按照字典顺序将其排序输出(二维字符数组)
  8. 集合的交并差 -python
  9. sublime设置代码缩进
  10. 安装及创建python虚拟环境
  11. 战之六 使用ADMT 3.2迁移用户和计算机
  12. 服务器接千兆无线网卡,用户吓跑!千兆宽带就是坑爹货:真相崩溃
  13. EDCSA OPENSSL签名验签方法
  14. CAD梦想画图中的“绘图工具——圆”
  15. 计算机打印驱动怎么安装,打印机驱动怎么安装,详细教您打印机驱动怎么安装...
  16. 电脑窗口全半屏切换快捷键
  17. jquery视频播放器_jQuery插入QuickTime视频播放器
  18. Get Out of My Lab: Large-scale, Real-Time Visual-Inertial Localization文章理解
  19. Vue移动端项目知识点
  20. CSS: Animation CSS:动画 Lynda课程中文字幕

热门文章

  1. 局域网 - 打印机共享与连接方法
  2. cxfreeze打包工程文件生成.exe,包含numpy,matplotlib, mutiprocess等工具包,运行exe出现闪退问题
  3. 流量劫持原理解析、流量劫持怎么办怎么解决
  4. Splinter使用中遇到的问题集锦
  5. Libre Office Calc 修改表格内容后边框变为红色
  6. 【批处理】共享打印机连接
  7. 关于Java 软件工程师应该知道或掌握的技术栈
  8. gcc可以编译python程序吗_gcc python
  9. idea连接HiveServer2
  10. RESTEasy底层使用Netty