Принудительное обновление страницы при нажатии кнопки «Назад» - PullRequest
7 голосов
/ 04 мая 2009

У меня есть 2 страницы asp.net. Страница A и страница B. При нажатии на ссылку на странице A пользователь перенаправляется на страницу B. Когда на странице B, если пользователь нажимает кнопку возврата браузера, мне нужно принудительно вызвать обновление страницы страницы A. Как мне достичь этой функциональности? Примечание: код должен быть совместим в разных браузерах ... т.е. IE, Firefox, Opera и т. Д.

Ответы [ 6 ]

1 голос
/ 03 января 2011

Я думаю, что у 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 голос
/ 04 мая 2009

Существует некоторое свойство кнопки, например Autopostback, вы можете попробовать его и посмотреть, поможет ли ti!

0 голосов
/ 10 апреля 2019

Вы можете попробовать сделать это так

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 голосов
/ 14 ноября 2013
    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 голосов
/ 04 мая 2009

Я бы сказал, что лучший способ сделать это - сказать браузеру не кэшировать страницу.

<%    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
   }
}
0 голосов
/ 04 мая 2009

Вы можете установить переменную сеанса на странице B и проверить, существует ли эта переменная сеанса на странице A, и обработать ее соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...