Como forçar uma página Atualizar enquanto pressiona o botão Voltar no Mac Safari
-
19-09-2019 - |
Pergunta
Eu tenho duas páginas ASPX (a, b) criadas usando o ASP.NET MVC. No arquivo A, tenho algumas caixas de seleção e caixas de texto.
Quando movo para a página B e tento navegar para a página A pressionando o botão Voltar do navegador (no MAC Safari), a página não está sendo atualizada. A página mantém seus valores antigos (para caixas de seleção e caixas de texto).
Quando eu tive o ponto de interrupção no lado do servidor. Eu sou capaz de obter o golpe.
Estou certo de que o método de ação do servidor é chamado. Há algum problema com o navegador MAC Safari.
Eu tentei o mesmo caso de uso nos outros navegadores, ou seja, parece funcionar corretamente.
Bastante simples, mas eu não recebo a resposta certa enquanto pesquisava no Google.
Alguém poderia sugerir uma contorna para isso no Mac.?
Obrigado ,
Vijay
Solução
Eu não verifiquei, mas tenho certeza de que o Safari para Mac não é o único navegador a fazer isso. Isso ocorre devido à maneira como o cache do navegador funciona. Quando você volta à história do navegador, o Safari (e o Afaik Firefox também) não solicita a página novamente. Em vez disso, o Safari/Webkit mantém uma cópia em memória da página visitada anterior, para que voltar a voltar é instantâneo.
Nesta situação, o Safari está mantendo uma cópia exata dela, incluindo os valores das entradas. Em uma situação normal, isso pode ser útil para o usuário e, como eu disse, não acho que o Safari seja o único que faz isso (e mesmo se fosse, outros navegadores poderiam optar por fazer o mesmo no futuro, então você não deve ter como alvo especificamente).
Desativar o cache para a ação 'A' deve fazer o truque, pois deve forçar o navegador a obter a página novamente (e redefinir o valor das entradas). Algo assim:
[System.Web.Mvc.OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
public ActionResult A()
{
return View();
}
Se isso não resolver o problema, talvez você precise limpar os valores com JavaScript no evento Onload da página da web (isso deve ser bastante trivial com o jQuery). Algo como:
$(document).ready(function() {
$('input').each( function() {
if($(this).attr('type') == 'checkbox') {
this.checked=false;
} else {
$(this).val('');
}
}
})
Nota: O código não foi testado, mas espero que ajude (se desativar o cache da página falhar) :)
Outras dicas
Tente definir o AutoComplete = "OFF" em seu formulário
Isso também acontece se você atualizar a página no Firefox.