【问题标题】:Relation between postback and viewstate (datagrid)回发和视图状态(数据网格)之间的关系
【发布时间】:2012-09-10 11:26:46
【问题描述】:

在这篇文章http://www.devx.com/vb2themax/Tip/18714“使用 EnableViewState 属性提高性能”中,我看不到他们在哪里将 EnableViewState 设置为 false。他们只是这样做

If Not Me.IsPostBack() Then
...
DataGrid1.DataBind()

Postback 和 ViewState 一样吗?

为什么不在数据网格控件上做 EnableViewState = false ?

【问题讨论】:

  • 假设这是在.aspx文件中设置的?

标签: asp.net gridview postback viewstate


【解决方案1】:

文章明确指出,第一个示例(您要退出的部分)通常在启用“ViewState”的情况下完成。由于只有第一个 get-request 需要将网格绑定到数据源 (IF Not Me.IsPostBack()),因为连续的回发会从保存的 ViewState 中恢复网格数据。

Page_Load 方法的第二个示例假定 ViewState 在 .aspx 文件中已被禁用,并在每次加载页面时将网格绑定到数据源。

Me.IsPostBack 的调用仅检查表单是否通过http post 访问,而ViewState 是一个对象,它保存与ASP.NET 服务器控件的可视化表示有关的所有信息。所以,不,它们不一样!

【讨论】:

    【解决方案2】:

    网格控件充当许多控件的容器。每个控件都在 ViewState 中存储了大量信息。

    ViewState 默认存储在隐藏控件中。这意味着它会在每个页面请求上发送到客户端。为避免这种开销,您可以将 EnableViewState 设置为 false。

    <asp:GridView ID="GridView1" runat="server" EnableViewState="false">
    

    ViewState 和 PostBack 是两个完全不相关的实体。 ViewState 存储控件想要保留的任何信息。 PostBack 仅指用户将信息发送回页面。

    不过,ViewState 对于记住用户在上次 PostBack 中输入的值也非常有用。如果您的 ViewState 非常大,并且您不想将其发送给用户,请考虑将其保存在 Session 中。您可以通过将 PageStatePersister 设置为 SessionPageStatePersister

    来做到这一点

    SessionPageStatePersister 利用与 用于存储数据的浏览器会话。使用会话而不是 隐藏字段避免了发送到的页面大小的增加和 从浏览器。在许多情况下,页面状态很重要 整体标记的一部分。但是,将此数据存储在会话中 消耗宝贵的服务器资源。

    【讨论】:

      猜你喜欢
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-04
      • 1970-01-01
      • 2018-07-13
      • 2013-06-02
      相关资源
      最近更新 更多