ViewData 和 ViewBag 在哪里?

Where ViewData and ViewBag reside?

注意:这不是 this 问题的重复,因为它没有完全回答问题。

我的问题是,当您为 ViewDataViewBag 赋值时(例如 TempData 驻留在 Session 中),它究竟存储在哪里。

两者都居住在 Session 吗?

如果不是那么在哪里?

正如@SlickSim 在评论中提到的,它们存储在堆中,因为引用类型在 .net 中。

ViewBagdynamic 类型,但在内部是 System.Dynamic.ExpandoObject()

声明如下:

dynamic ViewBag = new System.Dynamic.ExpandoObject();

这就是为什么你可以这样做:

ViewBag.Foo = "Bar";

继承层次结构:

System.Object    
    System.Dynamic.ExpandoObject

有关ExpandoObject

的更多信息

请阅读 this codeproject 上有关值类型、引用类型、堆和堆栈的文章,这可能有助于您了解 ViewData 和 Viewbag 所在的位置。

希望对您有所帮助!