说明:异步跟新当前页面,将页面中修改后的信息保存在历史记录点中。跳转到其他页面后,点击浏览器后退按钮。回到原来页面,触发Navigate事件,调用方法读取历史记录点还原当前页。
代码什么的,还是要上机试了再贴
前台HTML结构:
<!-- 管理页面脚本资源,存在于所有Ajax控件之前 -->
<!-- 设置允许操作浏览器历史记录,对保存历史信息不加密 -->
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableHistory="true"
EnablePartialRendering="true" OnNavigate="ScriptManager1_Navigate"
EnableSecureHistoryState="false" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ScriptManager1" EventName="Navigate" />
</Triggers>
</asp:UpdatePanel>
<div>
<asp:Button ID="butSearch" runat="server" Text="搜 索"
OnClick="butSearch_Click" /><br />
<a href="OtherPage.aspx">跳转</a>
</div>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="无数据"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ScriptManager1" EventName="Navigate" />
<asp:AsyncPostBackTrigger ControlID="butSearch" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
后台代码:
#region 事件
protected void ScriptManager1_Navigate(object sender, HistoryEventArgs e)
{
LoadHistoryPoint(e.State);
Bind();
}
protected void butSearch_Click(object sender, EventArgs e)
{
Bind();
}
#endregion
#region 方法
private void Bind()
{
this.Label1.Text = DateTime.Now.ToString();
if (ScriptManager1.IsInAsyncPostBack && !ScriptManager1.IsNavigating)
{
SaveHistoryPoint();
}
}
//保存当前页面状态信息(历史记录点)到浏览器
private void SaveHistoryPoint()
{
NameValueCollection state = new NameValueCollection();
state[Request.Url.AbsolutePath] = Request.Url.AbsolutePath;
state["TextBox1"] = TextBox1.Text;
state["Label1"] = Label1.Text;
//保存历史时间点(仅以 URL 的形式存储在浏览器的历史记录堆栈中!)
//会将state信息直接追加在URL后(浏览器地址栏: #(片段分隔符)分隔,状态信息跟在“&&”后)
//因此需要控制大小,仅存储重新创建状态所需的信息
ScriptManager1.AddHistoryPoint(state, "historypoint");
}
//读取历史记录点还原页面状态
private void LoadHistoryPoint(NameValueCollection state)
{
TextBox1.Text = state["TextBox1"].ToString();
Label1.Text = state["Label1"].ToString();
}
#endregion
关于Navigate事件何时触发:
目前我发现是在,保存历史记录点后(URL内容变化),跳转到其他页面,在点击浏览器后退按钮后触发,可用来还原页面信息。