Как принудительно обновить страницу при нажатии кнопки «Назад» в MAC-сафари - PullRequest
1 голос
/ 15 декабря 2009

У меня есть две страницы aspx (A, B), созданные с использованием ASP.NET MVC. В файле A у меня есть несколько флажков и текстовых полей.

Когда я перехожу на страницу B и пытаюсь перейти на страницу A, нажав кнопку возврата браузера (в MAC Safari), страница не обновляется. Страница сохраняет свои старые значения (для флажков и текстовых полей).

Когда у меня была точка останова на стороне сервера. Я могу получить удар.

Я уверен, что вызывается метод действия на стороне сервера. Существует некоторая проблема с браузером MAC SAFARI.

Я попробовал тот же вариант использования в других браузерах IE и FF, похоже, работает корректно.

Довольно просто, но я не получаю правильный ответ, пока гуглю.

Может кто-нибудь предложить обойти это в MAC .?

Спасибо,

Виджей

Ответы [ 2 ]

1 голос
/ 15 декабря 2009

Я не проверял, но я уверен, что Safari для Mac - не единственный браузер, который делает это. Это из-за того, как работает кеш браузера. Когда вы возвращаетесь в историю браузера, Safari (и AFAIK Firefox также) не запрашивает страницу снова. Вместо этого Safari / Webkit хранит копию в памяти предыдущей посещенной страницы, поэтому возвращение происходит практически мгновенно.

В этой ситуации Safari хранит его точную копию, включая значения входных данных. В обычной ситуации это может быть удобно для пользователя, и, как я сказал, я не думаю, что Safari - единственный, кто делает это (и даже если бы это было так, другие браузеры могли бы сделать то же самое в будущем, поэтому Вы не должны нацеливаться конкретно).

Отключение кеша для действия «А» должно помочь, так как это заставит браузер снова получить страницу (и сбросить значение входов). Примерно так:

[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult A()
{
    return View();
}

Если это не решит проблему, вам, возможно, придется очистить значения с помощью javascript в событии onload веб-страницы (это должно быть довольно тривиально для jquery). Что-то вроде:

$(document).ready(function() {

     $('input').each( function() {
         if($(this).attr('type') == 'checkbox') { 
              this.checked=false;
         } else {
              $(this).val('');
         }
     }

})

Примечание: код не проверен, но я надеюсь, что это поможет (если отключение кэша для страницы завершится неудачно):)

0 голосов
/ 15 декабря 2009

Попробуйте установить autocomplete = "off" в вашей форме

Это также происходит, если вы обновляете страницу в Firefox.

...