asp.net - 浏览器返回缓存 - 禁用浏览器前进后退




如何查找用户是否点击浏览器后退按钮或刷新按钮 (5)

我需要找到用户点击浏览器后退按钮还是刷新按钮。

当他点击后退或刷新按钮时,我需要将页面重定向到错误页面。 这个怎么做。

我需要在我的ASP.net页面的JavaScript中做到这一点


你不能。 浏览器不会将自己的ui事件发送到服务器。 所有你得到的是http请求,一个看起来非常像另一个。 也许点击后退按钮,或者他们只是重新输入最后一个网址。请告诉我们是什么问题造成的,我们可以帮助您调整您的项目与http协议一起工作好一点。


我认为你想这样做是因为后回避,以避免重新提交一些行动或数据的权利? 具有讽刺意味的是,在asp.net webforms之前,这并不是一个巨大的问题,因为你通常必须发布到不同的URL而不是同一个URL(实际上很像asp.net mvc)。

我喜欢使用的一个技巧...即使在最技术性的点更慢...是有一个输入页面和一个帖子页面。 发布页面的HTML输出是一些超小的HTML,带有一个小小的javascript,它将浏览器历史记录中的当前网址(帖子页面)替换为结果页面(如果真的需要的话,甚至是原来的引用页面)。 结果是当用户点击后退按钮,他会被发送到原始输入页面,或者如果他点击刷新,他已经在新的结果页面上。

<html><body onload="location.replace('someURL.asp')"></body></html>

我们在Java / Struts1中通过在提交按钮上放置一个属性来完成它。 如果点击提交按钮,则按钮文本将在ActionForm中的属性中发送。 如果用户刷新信息的价值没有设置,所以我们知道用户没有点击按钮。 在这个属性为空的情况下,我们返回并呈现页面流的第一页。 在ASP.Net中的YMMV。


.NET 3.5可以很好地处理浏览器返回(和转发)按钮。 用Google搜索:“Scriptmanager EnableHistory”。 您可以控制哪些用户操作将向浏览器的历史添加条目(ScriptManager - > AddHistoryPoint),并且无论用户何时单击浏览器的Back / Forward按钮,ASP.NET应用程序都会收到一个事件。


Site.Master

在你的Site.Master ,放在<body>

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
<dx:ASPxLoadingPanel ID="MainLoadingPanel" runat="server" ClientInstanceName="MainLoadingPanel" Modal="True" />
<input type="hidden" id="refreshed" value="no" />
<script type="text/javascript" language="javascript">
    MainLoadingPanel.Show();
    window.onload = function () {
        var e = document.getElementById("refreshed");
        if (e.value == "no") {
            MainLoadingPanel.Hide();
            e.value = "yes";
        } else {
            e.value = "no";
            location.reload(true); // Reload the page or redirect...
        }
    };
</script>

没有Site.Master

在你的通用代码中,放在<body>

<input type="hidden" id="refreshed" value="no" />
<script type="text/javascript" language="javascript">
    window.onload = function () {
        var e = document.getElementById("refreshed");
        if (e.value == "no") {
            e.value = "yes";
        } else {
            e.value = "no";
            location.reload(true); // Reload the page or redirect...
        }
    };
</script>






back-button