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,两个好基友共用的是一个容器!

  • 相关阅读:
    Java学习笔记
    计算机基础知识点整理
    codeblock的GUN GCC compiler问题
    秋招小米面经
    闭包的特性(只做了粗略整理)
    overflow:hidden为什么可以清除浮动?
    项目中出现的问题
    MySql 备忘还原数据库
    MySql语句备忘 JSON截取
    MySql语句备忘 UPDATE
  • 原文地址:https://www.cnblogs.com/liulinjie/p/4200927.html
Copyright © 2011-2022 走看看