在这篇文章http://www.devx.com/vb2themax/Tip/18714 “使用 EnableViewState 属性提高性能”中,我看不到他们在哪里将 EnableViewState 设置为 false。他们只是做
If Not Me.IsPostBack() Then
...
DataGrid1.DataBind()
Postback 和 ViewState 一样吗?
为什么不在数据网格控件上做 EnableViewState = false 呢?
在这篇文章http://www.devx.com/vb2themax/Tip/18714 “使用 EnableViewState 属性提高性能”中,我看不到他们在哪里将 EnableViewState 设置为 false。他们只是做
If Not Me.IsPostBack() Then
...
DataGrid1.DataBind()
Postback 和 ViewState 一样吗?
为什么不在数据网格控件上做 EnableViewState = false 呢?
文章明确指出,第一个示例(您要退出的部分)通常在启用“ViewState”的情况下完成。由于只有第一个 get-request 需要将网格绑定到数据源 ( IF Not Me.IsPostBack()
),因为连续的回发会从保存的 ViewState 中恢复网格数据。
Page_Load 方法的第二个示例假定 ViewState 已在 .aspx 文件中被禁用,并在每次加载页面时将网格绑定到数据源。
调用Me.IsPostBack
只检查表单是否通过 http post 访问,而 ViewState 是一个对象,它保存与 ASP.NET 服务器控件的可视化表示有关的所有信息。所以,不,它们不一样!
网格控件充当许多控件的容器。每个控件都在 ViewState 中存储了大量信息。
默认情况下,ViewState 存储在隐藏控件中。这意味着它会在每个页面请求上发送到客户端。为了避免这种开销,您可以将 EnableViewState 设置为 false。
<asp:GridView ID="GridView1" runat="server" EnableViewState="false">
ViewState 和 PostBack 是两个完全不相关的实体。ViewState 存储控件想要保留的任何信息。PostBack 仅指用户将信息发送回页面。
然而,ViewState 对于记住用户在上次 PostBack 中输入的值也非常有用。如果您的 ViewState 非常大,并且您不想将其发送给用户,请考虑将其保存在 Session 中。您可以通过将 PageStatePersister 设置为SessionPageStatePersister来做到这一点
SessionPageStatePersister 利用与浏览器会话关联的服务器会话来存储数据。使用会话而不是隐藏字段避免了发送到浏览器和从浏览器发送的页面大小的增加。在许多情况下,页面状态是整个标记的重要组成部分。但是,将这些数据存储在会话中会消耗宝贵的服务器资源。