码迷,mamicode.com
首页 > 其他好文 > 详细

ViewData和ViewBag的那些事

时间:2015-01-04 14:49:35      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
是这样的吗?我半信半疑,于是决定详细了解一下这两位好基友的情况。

既然结论是“共享着相同的数据”,那我们就证实一下吧。
技术分享

技术分享

技术分享
看来结论是正确的。

去查看定义,发现他们的类型是不一样的,ViewData是ViewDataDictionary,ViewBag是dynamic
技术分享

下个断点,看一下监控
技术分享
技术分享
这时候发现ViewBag的类型不是定义中的dynamic,变成了是DynamicViewDataDictionary
既然数据是共享的同一份,那这个ViewDataDictionaryDynamicViewDataDictionary,又有什么关系呢?

使用ILSpy反编译发现ViewBag的代码是这样的:
技术分享

ViewBag返回的是_dynamicViewData
继续跟踪发现_dynamicViewData的类型是DynamicViewDataDictionary,
技术分享

再看DynamicViewDataDictionary,发现TryGetMemberTrySetMember两个方法,操作的实质上都是ViewData
技术分享
所以,ViewBag的get,其实是对整个ViewData的get

而我们对ViewBag的动态属性进行赋值,值实际上是存到了ViewData中,动态属性的名存成了ViewDataDictionary的键,动态属性的值存成了ViewDataDictionary的值。
ViweBag其实是一个包了一层Dynamic的ViewData,两个好基友共用的是一个容器!

ViewData和ViewBag的那些事

标签:

原文地址:http://www.cnblogs.com/liulinjie/p/4200927.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!