【问题标题】:Data Persistence in ViewData verses tempDataViewData 与 tempData 中的数据持久性
【发布时间】:2011-09-21 21:38:33
【问题描述】:

我想知道 Data 可以在 ViewData 字典中保留多长时间。我知道数据不能在 TempData 中保留那么长时间(不到一个小时)。那么在 ViewData 中能持续多久呢?是否有另一个数据字典可以将数据保存很长时间。我知道它开始听起来像是我想要一个会话变量,这非常不符合 MVC,但是有没有其他方法可以让我从控件获取数据到视图,而无需直接将其作为参数传递。

【问题讨论】:

    标签: asp.net-mvc-2 viewdata


    【解决方案1】:

    我想知道数据可以在 ViewData 字典中保留多长时间

    它从你把它放在那里的那一刻一直持续到请求结束的那一刻,即页面被渲染并发送给客户端。

    我知道数据不能在 TempData 中保留那么长时间(不到一个小时)

    TempData 类似于 Session 但只持续到下一个请求。所以它可能是几秒钟、几分钟、几小时、几天……

    我知道它开始听起来像是我想要一个会话变量,这是非常不符合 MVC 的

    我不会说 un-MVCish,我会说 un-RESTfulish

    是否有另一个数据字典可以将数据持久化很长时间

    是的,会话、您的底层数据存储(如数据库或其他东西)、cookie、应用程序范围、缓存……这一切都取决于您的具体要求。

    【讨论】:

    • 因此,如果有人打开一个页面,并且在控制器上设置了 ViewData,并且他们将该页面保持打开一个小时左右,那么,他们就不能指望该变量持续该时间长度?
    • @DmainEvent,不,你不能指望这样的事情。您在控制器中设置 ViewData,控制器返回一个视图,视图呈现,它生成 HTML,并且在此呈现结束时,ViewData 与所有内容一起死亡。
    • 当 ViewData 被清空时,我是否可以检测到某些事件或某些东西,以便我可以向用户发送警报,然后让他们导航到不同的页面?
    • @DmainEvent,ViewData 被清空的时间远远早于您向用户发送任何内容。正如我在回答中所说,一旦页面呈现并准备好发送给用户,ViewData 将不再存在。
    • TempData 不会持续到下一个请求,但直到您阅读它。 index 属性的 getter 函数删除条目。因此 TempData 可以很好地用于像向导这样的具有多个页面的场景。但是,读完之后,如果要进一步保留,还需要将内容重新写回去。
    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 2015-12-23
    • 2010-09-15
    • 2017-06-15
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多