代码之家  ›  专栏  ›  技术社区  ›  rjzii

如何自定义ASP。NET控件缓存数据而不使用ViewState?

  •  2
  • rjzii  · 技术社区  · 17 年前

    GridView 然而,由于其中一些列表可能包含大量数据,它们有时会将页面权重推高到几兆字节的范围内,因为 ViewState 。由于我们不想在每次页面上有回发时都重新查询数据库以获取此信息,我想知道是否有办法在服务器上缓存提供给控件的数据,然后在下次回发时访问它。

    那么,这有可能吗?如果是这样,有人能告诉我更多关于如何做到这一点的信息吗?如果不可能,有人对我如何解决这个问题有什么建议吗?

    4 回复  |  直到 17 年前
        1
  •  3
  •   Jeff Martin    17 年前

    This Article

    其要点是覆盖SavePageStateToPersistenceMedium和LoadPageStateFromPersistenceMedium。

        2
  •  2
  •   andleer    17 年前

    您可以尝试关闭GridView上的ViewState。这通常可以在不影响功能的情况下完成。如果您的GridView只显示数据,不允许编辑、更新、删除等,则效果很好。

    http://www.pluralsight.com/main/screencasts/screencast.aspx?id=understanding-viewstate

    EnableViewState="false"
    

    http://msdn.microsoft.com/en-us/library/hdxfb6cy.aspx

    <%@ Page Language="C#" AutoEventWireup="true" ... %>
    <%@ OutputCache ... %>
    
        3
  •  0
  •   Thomas Petersen    17 年前

    http://www.marklio.com/marklio/PermaLink.aspx?guid=af76f1a0-2d44-44c3-bfb5-029740b8e683

    您仍然使用这种方法的Viewstate,但您不是在填充HTML,而是在服务器端创建临时文件。因此,用户不会注意到Viewstate是巨大的。您还可以重写上面的示例,将Viewstate数据存储在其他地方,比如数据库甚至内存中。

    这种方法的优点是,您不必重写太多代码。缺点是这些临时文件会占用服务器上的空间,需要偶尔清理一次。

        4
  •  0
  •   ljubomir    17 年前

    如果您不能指望Session进行缓存,那么总有一些替代的持久性机制可以完成这项工作。