您的位置:首页 > 编程语言 > C#

C# .NET Ajax控件异步跟新实例

2011-08-11 17:56 363 查看
说明:异步跟新当前页面,将页面中修改后的信息保存在历史记录点中。跳转到其他页面后,点击浏览器后退按钮。回到原来页面,触发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内容变化),跳转到其他页面,在点击浏览器后退按钮后触发,可用来还原页面信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: