【问题标题】:ViewState alternatives in ASP.NET WebformsASP.NET Webforms 中的 ViewState 替代方案
【发布时间】:2023-03-20 02:36:01
【问题描述】:

还有其他 ViewState 替代方案吗?我听说过很多 Like Session,持有一些页面控件的状态,并在用户离开页面的那一刻被销毁。

我知道我在描述 ViewState 本身,但我正在寻找一种模式或建议,以便完全避免 ViewState。

我如何使用它的一个示例是将我的网格(ViewModel 列表)的内容存储到 ViewState 的位置。这有助于了解哪些条目是脏的、哪些条目已被修改、它们的索引、当前选择的对象等。

【问题讨论】:

    标签: asp.net viewstate


    【解决方案1】:

    我的一位同事开发了一种将视图状态数据存储在文件中的方法。这样,客户端和服务器之间就不会传输大量的视图状态数据。仅表示视图状态数据文件的键(即视图状态数据文件)作为会话变量保存。在我们的测试中,我们发现将视图状态保存在文件中会通过减少视图状态的数量(当时非常庞大)来减少服务器响应时间。

    在这个article“保持服务器上的视图状态”下,您可以了解如何实现该方法。您甚至可以将视图状态数据存储在数据库表中,如果您的应用程序位于网络场中,这将提供额外的灵活性。

    【讨论】:

    • 虽然这似乎不是替代方案,但您可以在不改变整个架构的情况下提高应用程序的性能。
    • 我一定会调查的。
    【解决方案2】:

    我认为您没有理由放弃 ViewState。

    如果您持有大量数据,则在将其保存在其他任何地方时会遇到问题。会议?它会消耗您的内存,或者如果它超出进程,您将在每次加载/写入 Session 时移动所有这些(每个请求一次)。当然,您可以尝试通过尽快释放存储的数据来限制问题/就像 asp.net MVC 中的 TempData。

    您可以通过引入时间戳/或记录版本来最大限度地减少检查修改记录所需存储的信息量。这样您就可以检查是否添加了新版本,并向用户显示他们尝试保存的内容以及其他人保存的内容。

    【讨论】:

      【解决方案3】:

      另一个选项是压缩您的 ViewState。它仍然会增加往返行程的体积,但通常很少。

      如果您使用的是 .Net 4,有一些有用的新 ViewState 添加:

      ASP.NET 4.0: more control on viewstate management

      【讨论】:

      • 啧。我们仍在使用 .Net 3.5 开发大部分应用程序。
      【解决方案4】:

      你有Session,你有Cache

      会话是每个用户的,缓存是全局的。

      您真的需要将所有这些都存储在 ViewState 中吗?为什么你可以提交(但你的问题很模糊,所以我在这里做一些假设)从数据库中获取所有旧数据,将其与你的新数据进行比较,并更新更改的内容?

      【讨论】:

      • 让状态作为 ViewModel 驻留在我的视图中让我感觉更自在。 (我确实只保留了我认为对控件运行真正必要的东西。)其他所有东西都会在回发时重新创建。不会从数据库中获取,重新创建 ViewModel,然后进行比较通常会变慢吗?
      猜你喜欢
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      相关资源
      最近更新 更多