点击返回按钮时强制刷新页面

7
我有两个ASP.NET页面,页面A和页面B。点击页面A上的链接后,用户将被重定向到页面B。当用户在页面B时,如果单击浏览器的返回按钮,我需要强制调用页面A的刷新。如何实现此功能?注意:代码需要兼容不同的浏览器...例如IE、Firefox、Opera等。
6个回答

1

我认为Javascript无法判断是第一次访问还是从后退按钮返回。因此,我将需要更新的页面部分放在UpdatePanel中,然后使用JavaScript在每次页面加载时始终刷新这些部分。虽然不太优雅,但它解决了我的问题。

function addLoad(fn) {
    if (window.addEventListener) {
        window.addEventListener("load", fn, false); 
        return true; 
    } else if (window.attachEvent) {
        var r = window.attachEvent("onload", fn); 
        return r;
    } else {
        return false; 
    } 
}
function refreshBack()
{
    __doPostBack("<%= updatePanel1.ClientID %>", "");
    __doPostBack("<%= updatePanel2.ClientID %>", "");
}
addLoad(refreshBack);

1

有一些按钮属性,比如Autopostback,你可以尝试一下看看是否有帮助!


0
你可以尝试这样做。
protected override void OnInit(EventArgs e)
{
    //Refresh page on back button
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetNoStore();
    Response.Cache.SetExpires(DateTime.MinValue);
    base.OnInit(e);
}   

0
我认为最好的方法是告诉浏览器不要缓存页面。
<%    Page.Response.Expires = 0;   %>

如果那不能满足你的需求,你需要使用JavaScript来强制刷新。
伪代码:
if (cookie does not exist)
  set cookie with 10 second expiration
else if cookie exists {
  is cookie expired? {
     set new cookie
     refresh page
   }
}

警告:将到期时间设置为0会在IE7中引发“网页已过期”错误并强制用户刷新页面。如果用户看到该错误页面,可能会使您的用户感到困惑。 - jamesmillerio
如何使用JavaScript刷新ASP.NET页面? - Steve Chapman

0
    function SetCookie (name, value) {
var argv=SetCookie.arguments;
 var argc=SetCookie.arguments.length;
 var expires=(argc > 2) ? argv[2] : null;
 var path=(argc > 3) ? argv[3] : null;
var domain=(argc > 4) ? argv[4] : null;
var secure=(argc > 5) ? argv[5] : false;
document.cookie=name+"="+escape(value)+
((expires==null) ? "" : ("; expires="+expires.toGMTString()))+
((path==null) ? "" : ("; path="+path))+
((domain==null) ? "" : ("; domain="+domain))+
((secure==true) ? "; secure" : "");
 }



 function getCookie(c_name)
{
var c_value = document.cookie;
var c_start = c_value.indexOf(" " + c_name + "=");
if (c_start == -1)
{
    c_start = c_value.indexOf(c_name + "=");
}
if (c_start == -1)
{
    c_value = null;
}
else
{
    c_start = c_value.indexOf("=", c_start) + 1;
    var c_end = c_value.indexOf(";", c_start);
    if (c_end == -1)
    {
        c_end = c_value.length;
    }
    c_value = unescape(c_value.substring(c_start,c_end));
}
return c_value;
  }   




if (getCookie('first_load'))        
{
  if (getCookie('first_load')==true)
 {
    window.location.reload(true); // force refresh page-liste
    SetCookie("first_load",false);
}
}
SetCookie("first_load",true);

0
你可以在页面B上设置一个会话变量,然后检查页面A上是否存在该会话变量,并相应地处理它。

谢谢,但是浏览器的返回按钮点击会调用页面A的Page_Load方法吗? - Steve Chapman
没有,不能保证。你必须使用Javascript,它是唯一可以在缓存页面上运行的东西。 - Chad Grant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接