单击后退按钮强制页面刷新

时间:2009-05-03 21:36:05

标签: asp.net javascript ajax browser

我有2个asp.net页面..页面A和页面B. 单击页面A上的链接,用户将被重定向到页面B.当在页面B上,如果用户单击浏览器的后退按钮,我需要强制调用页面A的页面刷新。 我如何实现此功能? 注意:代码需要兼容不同的浏览器...即IE,firefox,opera等

6 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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);

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我想说最好的办法就是告诉浏览器不要缓存页面。

<%    Page.Response.Expires = 0;   %>

如果这不能满足您的需求,您需要使用javascript来强制刷新。

Psuedo代码:

if (cookie does not exist)
  set cookie with 10 second expiration
else if cookie exists {
  is cookie expired? {
     set new cookie
     refresh page
   }
}

答案 4 :(得分: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);

答案 5 :(得分: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);
}