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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top