【问题标题】:listview itemcommand not firing after back buttonlistview itemcommand在后退按钮后未触发
【发布时间】:2012-04-18 08:55:32
【问题描述】:

我的页面使用多视图。每个视图都包含一个单独的用户控件。其中一个用户控件有一个带有图像按钮的列表视图,该按钮会导致在多视图中加载不同的视图。到目前为止一切都很好。当用户点击后退按钮时,他们将被带回包含列表视图的用户控件。用户然后单击另一个图像按钮以查看不同的数据,并使用与以前相同的数据返回到详细用户控件。在调试时,我看到点击后退按钮后项目命令事件没有触发。

我尝试替换多视图并将每个用户控件放入单独的面板中。这根本没有改变结果。

我尝试设置一个在页面加载后 5 秒过期的 cookie。当用户继续到下一页,然后点击返回(已经超过 5 秒),我强制表单再次提交。这会再次加载下一个控件,而不是重新加载页面。

我已尝试将可缓存性设置为无缓存。这会导致“页面过期”消息,并且用户必须刷新页面。这对用户来说是丑陋的,而且肯定会影响用户体验。

我正在寻找一种最简洁的方式让用户单击返回并重新加载页面,以便再次正确触发项目命令事件。

【问题讨论】:

    标签: asp.net back-button


    【解决方案1】:

    原因是返回不影响页面生命周期。这绝对是因为页面被缓存并且缓存的页面不在服务器上执行。你可以试试这个代码来解决这个问题。

    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetNoStore();

    【讨论】:

    • 我已经尝试过了,但这会迫使用户重新加载页面,而不是让页面自己加载。这个过程需要是无缝的。用户不应被打断。他们需要做的就是反击,让页面重新加载,而无需他们做任何事情。
    【解决方案2】:

    需要大量研究才能找到这个答案,所以希望其他人偶然发现这个问题并找到我的答案。我很惊讶我居然能找到这个。好吧,幸灾乐祸。

    因为当用户单击后退按钮时页面没有回发,所以事件没有正确触发,从而导致下一页出现问题。必须发生的是您需要能够处理浏览器的导航按钮(即后退和前进)。为此,您必须在脚本管理器中将 EnableHistory 设置为 true,并从脚本管理器处理 Navigate 事件。然后,您可以使用保存在状态对象中的信息重新加载控件。

    我使用 DotNetSlackers.com 上 Dino Esposito 的这些文章作为参考。 Server Side History Management 和 Client Side History Management

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多