浏览器的后退按钮在ASP.NET应用程序中随机禁用

时间:2011-06-14 22:31:05

标签: c# asp.net internet-explorer back-button

在我的两页Web应用程序中,用户逐步输入信息并在第一页上进行选择。完成后,他们点击导航到第二页的“生成”按钮。用户打印该页面并点击浏览器的后退箭头,返回第一页,选择完整。

在生成几个页面(2或3)后,单击返回,只需禁用该图标而不返回。他们必须手动重新访问第一页,重新输入他们的信息和选择。

我发现显示即时历史的后退/前进箭头(IE8)右侧的向下箭头通常包括所有“之前”页面。但是当后退按钮即将在点击时禁用时,历史记录仅显示当前站点。

哪些事件,脚本,标题等清除了当前网站的历史记录?它出现在WinXP和Win7上的IE7和IE8中。在FireFox中,按钮没有禁用,但它也没有做任何事情。用户将其报告为最近,我一直在对应用程序进行更改,但它只影响第2页的HTML(不过脚本)。这可能是一个代码问题,如果它是最近的,但我不确定在仔细检查我最近的更改时要寻找什么。

2 个答案:

答案 0 :(得分:5)

哪个版本的IE?

在内部,IE在travellog(也称为后退/前向堆栈)中维护有限数量的数据。具有巨大回发形式的ASP.NET页面经常会破坏此限制,擦除历史堆栈。

在IE6和IE7中,如果表单输入字段的值大于523,659个字符,当您离开页面时,IE可能会清除当前会话的travellog(类似于历史记录),禁用后退和前进按钮

我相信整个Travellog大小限制在IE8中略有提升,但不超过几兆字节。

答案 1 :(得分:1)

作为一般规则,如果您希望用户在页面之间来回导航,我会在页面上为他们提供完成工作的链接(不使用javascript:back()),而不是使用浏览器的导航。 / p>

最有可能的是,单个页面的回发有时被视为页面,有时则不是。如果用户操作加载具有相同URI和查询字符串的页面,则大多数浏览器会认为“同一页面”即使一切都可能已更改。这通常是由于MultiViews大量使用了ViewState或Session中保存的当前视图的信息;在该页面中导航不会更改导航到的URI,因此浏览器不会将每个新加载记录为唯一。

如果您确实需要正确的来回功能,则需要确保每个链接都会导致浏览器被告知导航到与当前页面不同的URI。您可以通过添加查询字符串元素来实现此目的,该元素将出现在指向不同页面或视图的每个链接中,该元素将随用户每次单击而自动递增。这为浏览器每次都提供了不同的URI。您只能使用现有的QueryString元素在链接的URI上创建新的元素。这可能会变得很麻烦,更简单的解决方案就是提供页内导航并告诉用户不要再“点击”。