ASP.NET Ajax历史记录工作不正常

本文关键字:工作 不正常 记录 历史 NET Ajax ASP | 更新日期: 2023-09-27 18:24:14

我有一个ASP.NET/C#应用程序。

应用程序在UpdatePanel中包含一个PlaceHolder

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="LinkButton1" EventName="Click"/>    
        <asp:AsyncPostBackTrigger ControlID="LinkButton2" EventName="Click"/>
        <asp:AsyncPostBackTrigger ControlID="LinkButton3" EventName="Click"/>
    </Triggers>
    <ContentTemplate>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="false">
        </asp:PlaceHolder>
    </ContentTemplate>
</asp:UpdatePanel>

基本上,我在占位符中加载控件,这取决于使用函数点击了什么LinkButton

    LoadControls("ControlName");

我希望实现用户使用浏览器返回按钮的功能以便在控件中导航。所以我使用AJAX历史记录如下:

我将当前控件ID保存在会话变量中

Session["current"]

我在脚本管理器中启用历史记录并添加一个事件处理程序

<asp:ScriptManager ID="ScriptManager" runat="server" EnableHistory="True" onnavigate="ScriptManager_Navigate" />

(下面将介绍事件处理程序)首先,我将在链接按钮的事件处理程序中创建一个新的历史点(它们都使用相同的处理程序)

string ControlId=Session["current"].ToString();
if (ScriptManager.IsInAsyncPostBack && !ScriptManager.IsNavigating)
{
    ScriptManager.AddHistoryPoint("Hist", ControlId);
}

然后在Scriptmanager导航处理程序中

    protected void ScriptManager_Navigate(object sender, HistoryEventArgs e)
    {
        string Controlid = "";
        if (e.State["index"] != null)
        {
            Controlid = e.State["Hist"].ToString();
            LoadControls(Controlid );
        }
    }

当我加载控件时,我可以前后导航,一切都很好

问题是:

1) 第一个问题

我第一次点击"返回"。历史记录返回2个步骤,而不是一个步骤(之后正常工作)。这就像上一个历史记录没有保存一样。

2) 第二个问题

在"后退"到第一步之后,我可以做一个额外的"后退",其中e.State["Hist"]将为null,并给我一个错误。当e.State["Hist"]为null时,如何禁用"Browser Back"按钮?

非常感谢你的帮助。我希望我是清白的。

如果你需要更多的信息/代码,我很乐意为他们提供

ASP.NET Ajax历史记录工作不正常

没关系。这只是一个bug。会话["当前"]正在保存以前的控件,而不是当前控件。现在已修复。如果有人需要一个创建ajax历史的小例子,我将不提这个问题。