2012-02-15 61 views
1

我有一个ASP.NET 4.0网站。在该站点中,UpdatePanel中有一个treeview控件。ASP.NET 4.0,ScriptManager和HistoryPoints

请记住 - 当用户第一次访问该页面时,没有发生回发(更多在这一分钟内)。

当用户点击树中的节点时,它会触发回发。当用户在树上移动时,我可以设置历史积分 - 这不是什么大问题。历史点是所选节点的ID。 (我想用这个来驱动页面上的其他信息)

有两种行为,我看到了,我很为难至于如何纠正这些:

  • 首先,历史点似乎总是指向当前项目。如果我从项目A开始,然后单击项目B,当我点击后退按钮时,我在项目B处结束几次点击(就好像历史点都设置为相同的值)。我认为历史应该是用户点击的节点的运行列表......但在这种情况下,似乎列表始终是包含当前ID的历史点的集合。 (如果有人知道如何在脚本管理器中公开历史点的集合,我很想听听它是如何做到的)
  • 其次,还有更令人头疼的是,当树最初加载时,没有回传。有没有办法设置没有Ajax回发的历史点? (我想有一种方法来保存树的默认状态,但现在从根目录转到项目A,然后点击返回会将用户转到我打开页面之前的任何页面)

有没有其他人注意到ScriptManager的历史点怪异的行为?

我也想过替代方案 - 比如viewstate,隐藏字段,cookie,会话变量......但是我没有碰到任何我尝试过的解决方案。有没有办法让后退按钮工作没有的历史点? (我认为不存在)

回答

2

要设置没有回传的历史点,请致电ScriptManager.AddHistoryPoint()

我会冒险猜测添加历史点不是问题,但在ScriptManager.Navigate中,您没有正确加载状态,或者您正在依赖已经更新到Item的会话信息B.

查看历史记录状态的一种方法是为每个历史记录条目指定一个描述性足以描述页面状态的名称/标题。对于测试,您可以使用状态字符串散列的缩短版本,或者只是建立一个字符串来标识页面的状态,然后当您单击并按住后退按钮查看最近的浏览器历史记录时,您将看到具有描述性名称的页面以识别它们。

这里的MSDN页谈论:http://msdn.microsoft.com/en-us/library/cc472966.aspx

BTW:对不起,我迟到了这个问题。如果你仍然有问题,发布一些代码,以便我们可以看到你在做什么。我在几个页面的更新面板中使用树控件在页面上实现了历史点功能。