ViewBag和ViewData的用法和区别

作者:欧日鑫
撰写时间:2020年8月8日
一、ViewBag的定义
public dynamic ViewBag {get {if (_dynamicViewData == null) {_dynamicViewData = new DynamicViewDataDictionary(() => ViewData);}return _dynamicViewData;}
}
二、ViewData的定义
public ViewDataDictionary ViewData {get {if (_viewData == null) {SetViewData(new ViewDataDictionary());}return _viewData;}set {SetViewData(value);}
}
三、ViewData与ViewBag的区别
1、ViewData是字典类型,赋值方式用字典方式,通过key值读取对应的value, ViewData["myName"]
2、ViewBag是动态类型,使用时直接添加属性赋值即可 ViewBag.myName
3、ViewBag和ViewData只在当前Action中有效,等同于View
4、ViewData和ViewBag 中的值可以互相访问,因为ViewBag的实现中包含了ViewData
ViewData
参考的ViewBag和ViewData的用法和区别
ViewData是一个特殊的字典类的名称,我们可以用标准的字典语法进行修改或赋值,比如:
ViewData["Name"] = "Jack";
ViewBag
ViewBag 是asp.net mvc3中对ViewData的一种动态封装,用法更方便。他的赋值方法是:
ViewBag.Name = "Jack";
也就是说ViewData["Name"] 和 ViewBag.Name是一样的效果。 ViewBag和ViewData的区别
虽说用ViewBag来代替ViewData使用着更快捷,但是相对于ViewData来说,ViewBag还是有一些不能用的地方:
1.ViewBag要访问的必须是一个有效的标识符,否则无效。比如:ViewData["Query Income"]就不能使用ViewBag来访问。因为“Query Income”中有无效的C#标识符 空格。
2.动态值不能作为一个参数传递给扩展方法。因为C#为了选择正确的扩展方法规定必须标明每一个参数的类型。如果参数中有任何一个参数是动态的就无法通过编译。比如:
@Html.TextBox("Name",ViewBag.Name)就会编译失败。
解决方法:
① 将ViewBag.Name替换为ViewData["Name"];
② 把ViewBag.Name替换为一个具体类型的参数:(string)ViewBag.Name;

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

  1. ViewBag 和 ViewData 的用法和区别

    所谓的ViewBag是asp.net mvc3 中对ViewData 的 一种动态封装,用法更方便.它赋值的方法:ViewBag.Name = "jack":其实ViewBag[& ...

  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. 非升即走的博士们日后该怎么办?院长给出这5点建议
  2. 软件项目管理大作业_信息系统项目管理师该如何备考?
  3. C#正则表达式匹配字符串中的数字
  4. mysql5.5不兼容5.6sql文件_为什么这段sql在我的电脑上可以执行,另外一台不可以。使用的mysql5.6 另一台是5.5...
  5. 操作系之进程调度及算法详解
  6. ASP.NET MVC 实现二级域名(泛域名)
  7. zookeeper zoo.cfg配置文件
  8. 时间序列预测 预测时间段_应用时间序列预测:美国住宅
  9. 消解原理推理_什么是推理统计中的Z检验及其工作原理?
  10. 吴恩达发起新型竞赛范式!模型固定,只调数据?!
  11. 广东农信迁移上阿里云:系统建设从按月缩短至按天
  12. php 字符串混合分割并存入数组
  13. 手机python3ide加法器_Python3开发常用工具
  14. SQL反模式学习笔记1 开篇
  15. 【bzoj3456】城市规划(多项式求逆+dp)
  16. 华为NP课程笔记2-OSPF2
  17. 无法启动程序因为计算机中丢失msvcr100,Win7系统计算机中Msvcr100.dll丢失的解决办法(两种方法)...
  18. PostgreSQL/pgsql生成随机的姓名的函数
  19. 【CSS应用篇】——CSS如何实现渐变背景
  20. 设置WDS桥接成功,上不了网怎么办?路由器WDS无线桥接设置正确方法

热门文章

  1. 第一批阳了的中年人:卷不赢,躺不平,摆不烂
  2. 数据库原理第三章测验(标黑的为答案)
  3. PS:成功解决photoshop无法直接拖入图片
  4. 计算机名人堂(历届图灵奖获得者)
  5. 如何进行小红书推广?小红书平台适合推广什么产品?
  6. 厦门大学计算机调剂要求,厦门大学考研调剂复试有什么要求
  7. 室内定位方案部署WIFI定位还是IBeacon定位-新导智能
  8. 网罗天下 v1.0 下载
  9. MySQL008:数据库引擎,如何设置引擎独立空间
  10. 哪个求职网站最靠谱?