2012-09-10 37 views

回答

0

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

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

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

0

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

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

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

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

但是,ViewState对记住用户在上次回发中输入的值也非常有用。如果您的ViewState非常大,并且您不想将其发送给用户,请考虑将其保存在会话中。您可以通过设置PageStatePersister这样做是为了SessionPageStatePersister

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

相关问题