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

说明:异步跟新当前页面,将页面中修改后的信息保存在历史记录点中。跳转到其他页面后,点击浏览器后退按钮。回到原来页面,触发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内容变化),跳转到其他页面,在点击浏览器后退按钮后触发,可用来还原页面信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值