绪论
在这篇文章中,我们将研究两个可能的方案的其中之一,当使用ASP.NET AJAX(异步JavaScript 和XML)结构时,不管有没有要求使用state,都会发现自己在这两个可能的方案之中。
需不需要state?
ASP.NET中可以使用并且创建控件,这些控件在超文本传输协议请求时能保持它们的状态。使用状态的一个最好的控件就是GridView控件。GridView有一个浏览状态和编辑状态,如果你使过滤和页面调度成为可能的话,甚至你能拥有更多的状态.在ASP.NET中,控件的状态靠ViewState属性来维持。ViewState允许我们在超文本传输协议请求时保持控件的值,保持一个桌面应用程序的同一用户端口的一致性。
当我们需要state
前面已经说明:GridView是一个有多个状态的控件的好例子,调用每一个特殊的状态需要服务器的完全回传,此服务器通过引人注目的屏幕闪烁,打破了应用程序同一用户端口的一致性。
引进了ASP.NET AJAX(以前称为Atlas)后,与带有Postback 的服务器相连接的屏幕闪烁通常通过引进UpdatePanel来解决。以高标准的视角,你可以认为UpdatePanel——为UpdatePanel控件中预先包装了的内容提供异步更新。
需要注意的是:使用UpdatePanel仍然会导致服务器的完全回传,就像我们没有使用UpdatePanel一样,它也会导致服务器的完全回传。UpdatePanel的优点就是:它能保持Page事件模式,因此我们可以从UpdatePanel中,被包装的控件中发起事件,从数据的异步运行中得到好处。让我们来看一下在UpdatePanel中使用GridView的情况,确定服务器要求什么数据。
代码1: 在UpdatePanel中使用GridView
Collapse
<asp:ScriptManager
ID="sm"
runat="server" />
<asp:UpdatePanel
ID="upGv"
runat="server">
<ContentTemplate>
<asp:GridView
ID="gvPeople"
runat="server"
AllowPaging="True"
AllowSorting="True"
AutoGenerateColumns="False"
DataKeyNames="personid"
DataSourceID="odsPeople"
Width="400px">
<Columns>
<asp:CommandField
ShowEditButton="True" />
<asp:CommandField
ShowDeleteButton="true" />
<asp:BoundField
DataField="firstname"
HeaderText="First Name"
SortExpression="firstname" />
<asp:BoundField
DataField="lastname"
HeaderText="Last Name"
SortExpression="lastname" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>