ASP.NET 3.5 扩展预览 - AJAX 历史记录管理






4.16/5 (9投票s)
存储 ajax 历史记录点并使用浏览器的后退和前进按钮进行导航。
引言
ASP.NET 3.5 扩展预览现在正受到越来越多的关注,并且收到了许多文章,旨在讨论 ASP.NET API 的各种增强功能和新增功能。其中一项非常好的增强功能是 ASP.NET AJAX 能够管理 AJAX 事件的历史记录并将其记录到浏览器的历史记录日志中。
您可以在此处 http://quickstarts.asp.net/3-5-extensions/ 和此处 http://www.asp.net/downloads/3.5-extensions/ 查看更多关于 ASP.NET 3.5 扩展预览及其所有新功能的信息。
背景
在扩展之前,开发人员花费了大量时间来让浏览器记录 AJAX 事件的历史记录,并使用浏览器自己的前进和后退按钮导航这些事件,而且很可能未能实现这一要求。
但是现在,有了扩展,您只需几行代码即可实现此功能。本文将向您展示如何操作。
ASP.NET 3.5 扩展预览
首先,您需要从此处 http://www.microsoft.com/downloads/details.aspx?FamilyId=A9C6BC06-B894-4B11-8300-35BD2F8FC908&displaylang=en 下载 ASP.NET 3.5 扩展预览到您的机器上。
成功安装扩展后,您会在 Visual Studio 2008 IDE 中找到许多新的项目模板和控件...
管理 AJAX 历史记录
首先,打开您的 Visual Studio 2008 实例并创建一个新的 ASP.NET 3.5 扩展网站。
请注意扩展所添加的各种新控件,但为了本文的范围,我们将不使用任何它们。
首先添加一个标签和一个按钮,分别命名为“lblValue”和“btnIncrement”。
双击按钮以处理 Click 事件。将以下代码复制并粘贴到此处:
protected void btnIncrement_Click(object sender, EventArgs e)
{
lblValue.Text = string.IsNullOrEmpty(lblValue.Text) ? "0": (Convert.ToInt32(lblValue.Text) + 1).ToString();
}
基本上,当您运行网站并单击“Increment”按钮时,标签的值将递增。但我需要您注意浏览器中的一些情况。
单击 Increment 之前 | 单击 Increment 之后 |
![]() |
![]() |
请注意,当您单击 Increment 按钮时,浏览器会跟踪您的事件,并且每当您单击浏览器的后退按钮时,您都会返回到以前的状态……同时请注意,每当您单击 Increment 按钮时,整个页面都会回发(从可用性角度来看这不是一件好事)。
因此,为了使页面更具可用性,您应该添加一个 UpdatePanel,并将标签和按钮都放在该面板内,如下所示。
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="lblValue" runat="server"></asp:Label>
<br />
<asp:Button ID="btnIncrement" runat="server" onclick="btnIncrement_Click" Text="Increment" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
现在,运行应用程序并注意发生了什么。
单击 Increment 之前 | 单击 Increment 之后 |
![]() |
![]() |
浏览器没有识别发生的事情,因为该事件是异步在后台触发的,而没有进行整个页面的回发。
那么我们如何解决这个问题呢?
ASP.NET 扩展预览为我们提供了一个 API,用于处理 AJAX 事件并同时更新浏览器历史记录,分为两个步骤。
第一步,我们需要处理更改应用程序状态的事件(在我们的例子中是按钮的 Click 事件),并在每次新更改时创建一个历史记录点。
第二步,我们需要处理浏览器导航事件,这样当用户单击后退或前进按钮时,应用程序将恢复到最新的历史记录点。
步骤 1
在按钮的 Click 事件处理程序中,我们需要检查此条件:
if(ScriptManager1.IsInAsynchPostBack && !ScriptManager1.IsNavigating)
ScriptManager1.AddHistoryPoint("index", lblValue.Text, string.Format("Step {0}", lblValue.Text));
此检查是为了确保:
- 我们处于异步回发状态
- 此回发不是由用户单击浏览器后退或前进按钮引起的
AddHistoryPoint
方法接受三个参数(它还有其他两个重载)。
- 键:您可以为页面中不同的 AJAX 部分存储不同的键(例如,如果您有另一个需要存储事件历史记录的 AJAX 面板,则可以使用另一个键,以免它们重叠)。
- 状态:您将在此存储当前历史记录点的值(在我们的例子中是标签的值)。
- 标题:一个将显示在浏览器后退和前进按钮中的标题。
添加此代码后,返回 .aspx 页面,并在 ScriptManager1 标记中添加 EnableHistory
属性。将其设置为 true
。
<asp:ScriptManager ID="ScriptManager1" EnableHistory="true" runat="server" />
第二步
我们需要处理浏览器导航。为此,请向 ScriptManager1 控件的 Navigate
事件添加一个处理程序。
当用户单击浏览器的后退或前进按钮时,会引发此事件。
接下来的事情是获取新历史记录点状态的值并将其存储到标签中。
protected boid ScriptManager1_Navigate(object sender, HistoryEventArgs e)
{
lblValue.Text = e.State["index"];
}
现在注意运行应用程序时的区别。
您现在可以使用浏览器的后退和前进按钮来导航您的应用程序。
结论
总结本文,ASP.NET 扩展预览为我们提供了多项新功能和增强功能,其中一项是开发人员能够将 AJAX 事件记录为历史记录点,并管理浏览器的导航以恢复这些事件。