【问题标题】:Where are VIEWDATA and VIEWBAG stored in MVC?VIEWDATA 和 VIEWBAG 在 MVC 中存储在哪里?
【发布时间】:2014-08-06 10:20:34
【问题描述】:

我对 MVC 非常陌生...在 ASP .Net 中有状态管理技术,其中视图状态或 cookie 存储在客户端中,会话存储在服务器中。同样,我们在 MVC 中有 Viewbag、ViewData 和 TempData(cookie 和会话也在那里)。我知道从控制器 ViewData 存储为的语法等

ViewData["Foo"] = "bar";

ViewBag.Foo = "酒吧";

在相应的视图中它被提取为

ViewData["Foo"] = "bar";

@ViewBag.Foo

我只想知道 ViewData 和 ViewBag 存储在哪里(客户端或服务器或其他地方)? 如果这是一个无关紧要的问题,请原谅我,,,,,

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    ViewBagViewData 是状态管理的一部分。它们都是允许将数据(主要)从 Controller 传递到 View 的对象。

    这完全发生在服务器端,但将数据“存储”在服务器上的想法具有误导性。这些是仅在 HTTP 请求的生命周期内存在的瞬态对象。

    ViewBag 和 ViewData 的用例是:

    将少量数据从特定位置传输到特定位置(例如,控制器到视图或视图之间)。 ViewData 和 ViewBag 对象都适用于以下场景:

    • 将查找数据的下拉列表合并到实体中
    • 购物车等组件
    • 像用户个人资料小部件这样的小部件
    • 少量汇总数据

    来自http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

    要尝试避免的一件事是过度使用 ViewBag / ViewData。在 MVC 应用程序中,模型应该是传递给视图的东西,而不是其他任何东西。过度使用 ViewBag 和 ViewData 是 poor practice

    【讨论】:

    • 它们是在服务器上创建的吗?创建后它们会留在哪里?而且如果它们在服务器上,我们不能在其中存储大数据吗?
    • @AlexC 你的回答还不清楚。 view bag的情况下数据存储在哪里?
    • @VeeKayBee:如果这仍然相关,请参见此处:stackoverflow.com/questions/16871600/…
    【解决方案2】:

    好吧,我没有确凿的证据表明 viewBagViewData 是否存储在服务器/客户端上,但它们肯定会存储在服务器内存中而不是客户端中。

    首先,即使在 MSDN 文档中,您也没有看到人们谈论他们的存储;与ASP.NET 中的ViewState 不同,MSDN 文档清楚地描述了它存储在客户端。

    第二,因为ViewState被存储在客户端;它使用隐藏字段 (__VIEWSTATE) 在客户端存储视图状态数据。

    继续说下去,如果 ViewDataViewBag 也有相同的机制,那么查看 页面源代码 可能会突出显示这一点,但不会显示任何此类足迹。

    存储在 cookies 中绝不是一种选择,因为您可能永远无法确定它是否在客户端启用。

    另外,它真的需要存储在服务器/客户端吗?导致在浏览器中呈现视图后,ViewBagViewData 都会从内存中弹出。然后我看不出有任何理由将它们存储在ViewState 中以供下一页请求。

    只是经过一些研究后的想法。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2011-12-21
      • 2018-01-07
      • 2016-06-17
      • 1970-01-01
      • 2012-01-27
      • 2013-10-22
      相关资源
      最近更新 更多