【问题标题】:ASP.NET webforms maintain List<string> across postbacksASP.NET webforms 跨回发维护 List<string>
【发布时间】:2012-04-03 22:49:47
【问题描述】:

您好,我有一个小的List&lt;string&gt;,我想在一个页面上跨回发维护它。该列表不会包含超过 10 个项目,每个项目最多 40 个字符(无敏感数据)。

我知道有人问过类似的问题,但我在将其存储在 ViewStateSession 之间有些矛盾。我听说即使很小的字符串值也会导致 ViewState 值的大小大幅增加。我想遍历 List 并使用 Linq 来查询它,但我最好使用 string[] 数组,并且这个 List(大小不大)可以存储在 ViewState 中还是应该存储它在Session?谢谢。

【问题讨论】:

    标签: asp.net list viewstate session-variables


    【解决方案1】:

    我会更关心这个List&lt;&gt; 的范围。如果仅限于这一页,那么我认为使用ViewState 是完全可以接受的;这正是它的本意。

    但是,如果您需要在多个页面中保留此内容,那么评估 SessionCache 会更有意义。

    如果每个用户的列表不同,或者是否可以在多个用户之间共享,我也会记住。在那种情况下,我会倾向于Cache

    最后,我可能会因为这个而被遗忘,但您也可以查看使用SessionPageStatePersister 类将ViewState 存储在服务器端内存中的选项。

    祝你好运!

    【讨论】:

    • 所有信息都有助于我的学习,所以我会 +1 给你!我不需要它在多个页面上持续存在(事实上,如果数据在其他任何地方都不可用,我更愿意,尽管我正在使用Session.Abandon() 清除所有会话变量OnLoggedOut)。它将改变poer用户,因为我基本上想跟踪用户上传的照片的文件名......问题是用户也可以选择省略他们已经上传的某些照片,并为我提供一种检查方式如果他们上传的照片不超过 10 张。
    【解决方案2】:

    如果你不滥用它,在 ViewState 中存储东西并不是一个糟糕的主意。如果列表很小并且只在一页上有意义,那就去吧。

    只要记住 ViewState 是可以被篡改的,所以如果你不想让客户端知道它,那么你就是金子。否则将其存储在 Session 中。

    【讨论】:

    • 嗨乔希,谢谢。是否有任何令人信服的理由将其存储在 Session 中?
    • 这可能只是我整个应用程序中我有意存储在 ViewState 中的两件事之一。
    • @maGz - 仅当您希望它在整个会话中持续存在或可以在不同页面中访问它时。我倾向于尽可能避免使用会话,因为如果您严重依赖会话,它会使扩展更加困难。例如,被退回到网络场中的不同服务器。如果它只存在于单个页面,那么 ViewState 是您最好的选择。再说一遍,不要滥用它。大 ViewState 是它自己的邪恶形式。
    猜你喜欢
    • 2013-01-01
    • 2011-06-10
    • 1970-01-01
    • 2013-10-29
    • 2010-11-29
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多