ViewBag和ViewData的用法和区别
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的用法和区别相关推荐
- ViewBag 和 ViewData 的用法和区别
所谓的ViewBag是asp.net mvc3 中对ViewData 的 一种动态封装,用法更方便.它赋值的方法:ViewBag.Name = "jack":其实ViewBag[& ...
- ViewBag、ViewData和TempData使用方法、区别与联系
一.区别与联系 ViewData 和 TempData 都可以传递弱类型数据,区别如下:TempData 只在当前 Action 中有效,生命周期和 View 相同:保存在Session中,Contr ...
- viewBag和viewData区别
viewBag和viewData区别 viewData: 它是key/value字典集合 从Asp.net mvc1 就有了 基于Asp.net3.5 framework ViwData比ViewBa ...
- ViewBag 和 ViewData 的传值
ViewBag 和 ViewData 的传值 简介:在 ASP.NET MVC 中,页面间和 Controller 与View之间主要有以下几种小量数据传值方式,ViewData. ViewBag.T ...
- python 类变量、实例变量、参数、实例方法、类方法、静态方法 的用法和区别
#!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Introduce : 类变量.实例变量.参数.实例方法.类方法 ...
- ViewBag与ViewData传值乱码问题解决方案
ViewBag与ViewData传值乱码问题解决方案 参考文章: (1)ViewBag与ViewData传值乱码问题解决方案 (2)https://www.cnblogs.com/mi21/p/121 ...
- kmalloc/kfree,vmalloc/vfree函数用法和区别
kmalloc/kfree,vmalloc/vfree函数用法和区别 1.kmalloc 1>kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零. ...
- Javascript:history.go()和history.back()的用法和区别
Javascript:history.go()和history.back()的用法和区别 简单的说就是:go(-1): 返回上一页,原页面表单中的内容会丢失:back(): 返回上一页,原页表表单中 ...
- set和enum类型的用法和区别
mysql中的set和enum类型的用法和区别 mysql中的enum和set其实都是string类型的而且只能在指定的集合里取值, 不同的是set可以取多个值,enum只能取一个值. 1 2 3 ...
最新文章
- 非升即走的博士们日后该怎么办?院长给出这5点建议
- 软件项目管理大作业_信息系统项目管理师该如何备考?
- C#正则表达式匹配字符串中的数字
- mysql5.5不兼容5.6sql文件_为什么这段sql在我的电脑上可以执行,另外一台不可以。使用的mysql5.6 另一台是5.5...
- 操作系之进程调度及算法详解
- ASP.NET MVC 实现二级域名(泛域名)
- zookeeper zoo.cfg配置文件
- 时间序列预测 预测时间段_应用时间序列预测:美国住宅
- 消解原理推理_什么是推理统计中的Z检验及其工作原理?
- 吴恩达发起新型竞赛范式!模型固定,只调数据?!
- 广东农信迁移上阿里云:系统建设从按月缩短至按天
- php 字符串混合分割并存入数组
- 手机python3ide加法器_Python3开发常用工具
- SQL反模式学习笔记1 开篇
- 【bzoj3456】城市规划(多项式求逆+dp)
- 华为NP课程笔记2-OSPF2
- 无法启动程序因为计算机中丢失msvcr100,Win7系统计算机中Msvcr100.dll丢失的解决办法(两种方法)...
- PostgreSQL/pgsql生成随机的姓名的函数
- 【CSS应用篇】——CSS如何实现渐变背景
- 设置WDS桥接成功,上不了网怎么办?路由器WDS无线桥接设置正确方法