zoukankan      html  css  js  c++  java
  • ViewData和ViewBag的那些事



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

    002.jpg

    02.jpg
    看来结论是正确的。

    去查看定义,发现他们的类型是不一样的,ViewData是ViewDataDictionary,ViewBag是dynamic
    01.jpg

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

    使用ILSpy反编译发现ViewBag的代码是这样的:
    05.jpg

    ViewBag返回的是_dynamicViewData
    继续跟踪发现_dynamicViewData的类型是DynamicViewDataDictionary,
    05-1.jpg

    再看DynamicViewDataDictionary,发现TryGetMemberTrySetMember两个方法,操作的实质上都是ViewData
    06.jpg
    所以,ViewBag的get,其实是对整个ViewData的get

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

  • 相关阅读:
    第一章 数据集散地:数据库
    第六章 使用ADO.NET查询和操作数据
    第五章 使用ADO.NET访问数据库
    第四章 深入C#的String类
    IOS框架和服务
    一步步调试解决iOS内存泄漏
    app跳转
    iOS 视频直播
    学习心得
    iOS中FMDB的使用
  • 原文地址:https://www.cnblogs.com/liulinjie/p/4200927.html
Copyright © 2011-2022 走看看