回发和viewstate之间的关系(datagrid)

时间:2012-09-10 11:26:46

标签: asp.net gridview postback viewstate

在本文中http://www.devx.com/vb2themax/Tip/18714“使用EnableViewState属性提高性能”我无法看到它们将EnableViewState设置为false。他们只是做

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

回发是否与ViewState相同?

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

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

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

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

来完成此操作
  

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