Asp.net mvc ViewData和ViewBag位于何处?

Asp.net mvc ViewData和ViewBag位于何处?,asp.net-mvc,viewbag,viewdata,Asp.net Mvc,Viewbag,Viewdata,注意:这不是问题的重复,因为它不能完全回答问题 我的问题是,当您将值分配给会话中的ViewData或ViewBag类似TempData时,它将存储在何处 两者也驻留在会话中 如果不是,那么注释中提到的@SlickSim在哪里?它们存储在堆上,作为.net中的引用类型 ViewBag属于dynamic类型,但在内部是一个System.dynamic.ExpandoObject() 声明如下: dynamic ViewBag = new System.Dynamic.ExpandoObject();

注意:这不是问题的重复,因为它不能完全回答问题

我的问题是,当您将值分配给会话中的
ViewData
ViewBag
类似
TempData
时,它将存储在何处

两者也驻留在会话中


如果不是,那么注释中提到的@SlickSim在哪里?

它们存储在堆上,作为.net中的引用类型

ViewBag
属于
dynamic
类型,但在内部是一个
System.dynamic.ExpandoObject()

声明如下:

dynamic ViewBag = new System.Dynamic.ExpandoObject();
这就是为什么你可以这样做:

ViewBag.Foo = "Bar";
继承层次结构:

System.Object    
    System.Dynamic.ExpandoObject
有关

请通读有关codeproject上的值类型、引用类型、堆和堆栈的文章,这可能有助于您理解ViewData和Viewbag都位于何处


我希望有帮助

您链接的问题的答案明确指出:这完全发生在服务器端,但数据“存储”在服务器上的想法是误导的。这些是只在HTTP请求的生命周期内存在的临时对象,但我的问题是它驻留在会话中?如果没有,在哪里?我也了解这些对象的生命周期和限制。但它居住的地方正是我所寻找的。你能比链接的更详细地回答这个问题吗?两者都驻留在会话中。你可以通过禁用控制器上的SessionStateBehavior来检查这一点。看看这里,我不确定“驻留”是什么意思
ViewBag
ViewData
ControllerBase
类的属性。ViewBag和ViewData作为控制器的属性存储在堆上,作为.net中的引用类型。它们不会在会话中持久化,而是从控制器传递到viewpage。当请求结束时,控制器被释放,内存地址被标记为垃圾回收。