C# ASP.NET 4.0、ScriptManager和HistoryPoints
我有一个ASP.NET4.0网站。在该站点的UpdatePanel中有一个treeview控件 请记住-当用户第一次访问页面时,没有发生回发(稍后将详细介绍) 当用户单击树中的节点时,会触发回发。当用户在树中移动时,我可以设置历史点——这没什么大不了的。历史记录点是所选节点的ID。(我想用它来驱动页面上的其他信息) 我看到了两种行为,我很困惑如何纠正这些行为:C# ASP.NET 4.0、ScriptManager和HistoryPoints,c#,asp.net,ajax,C#,Asp.net,Ajax,我有一个ASP.NET4.0网站。在该站点的UpdatePanel中有一个treeview控件 请记住-当用户第一次访问页面时,没有发生回发(稍后将详细介绍) 当用户单击树中的节点时,会触发回发。当用户在树中移动时,我可以设置历史点——这没什么大不了的。历史记录点是所选节点的ID。(我想用它来驱动页面上的其他信息) 我看到了两种行为,我很困惑如何纠正这些行为: 首先,历史点似乎总是指向当前项目。如果我从项目A开始,然后单击项目B,当我点击后退按钮时,我会在项目B结束几次单击(好像历史点都设置为
- 首先,历史点似乎总是指向当前项目。如果我从项目A开始,然后单击项目B,当我点击后退按钮时,我会在项目B结束几次单击(好像历史点都设置为相同的值)。我认为历史记录应该是用户单击的节点的一个运行列表……但在本例中,该列表似乎始终是具有当前ID的历史记录点的集合。(如果有人知道如何在scriptmanager中公开历史记录点的集合,我很想知道如何公开)
- 其次,更令人头痛的是,当树最初加载时,没有回发。有没有一种方法可以在不使用Ajax回发的情况下设置历史记录点?(我想有一种方法来保留树的默认状态,但现在从根目录转到项目a,然后单击“上一步”将用户带到他们在点击“我的页面”之前所在的任何页面)
我也考虑过其他选择——比如viewstate、隐藏字段、cookie、会话变量……但我尝试过的任何解决方案都没有成功。有没有办法让后退按钮在没有历史记录点的情况下工作?(我认为没有)要在不回发的情况下设置历史记录点,可以调用
ScriptManager.AddHistoryPoint()
我大胆猜测,添加历史记录点不是问题所在,而是在ScriptManager中。导航,您没有正确加载回状态,或者您可能依赖已更新到项目B的会话信息
查看历史记录状态的一种方法是为每个历史记录条目指定一个名称/标题,该名称/标题足以说明页面的状态。对于测试,您可以使用状态字符串哈希的缩短版本,或者只构建一个字符串来标识页面的状态,然后当您单击并按住后退按钮查看最近的浏览器历史记录时,您将看到带有描述性名称的页面来标识它们
以下是MSDN页面,其中谈到:
顺便说一句:对不起,我来晚了。如果您仍然有问题,请发布一些代码,以便我们可以看到您正在做什么。我已经在我的几个页面的更新面板中使用树控件在页面上实现了历史点功能