2009-12-15 5 views
1

J'ai deux pages aspx (A, B) créées avec ASP.NET MVC. Dans le fichier A, j'ai quelques cases à cocher et des zones de texte.Comment forcer l'actualisation d'une page tout en appuyant sur le bouton Précédent dans le safari MAC

Lorsque je passe à la page B et que j'essaie de naviguer vers la page A en appuyant sur le bouton de retour du navigateur (dans MAC Safari), la page n'est pas actualisée. La page conserve ses anciennes valeurs (pour les cases à cocher et les zones de texte).

Lorsque j'ai eu le point de rupture du côté serveur. Je suis capable d'obtenir le coup.

Je suis sûr que la méthode d'action côté serveur est appelée. Il y a un problème avec le navigateur MAC SAFARI.

J'ai essayé le même cas d'utilisation dans les autres navigateurs IE et FF, il semble fonctionner correctement.

Assez simple, mais je devrais obtenir la bonne réponse tout en googling.

Quelqu'un pourrait-il suggérer une solution pour cela dans MAC?

Merci,

vijay

Répondre

1

Je n'ai pas vérifié, mais je suis à peu près sûr que Safari pour Mac n'est pas le seul navigateur à le faire. C'est à cause de la façon dont le cache du navigateur fonctionne. Lorsque vous revenez dans l'historique du navigateur, Safari (et AFAIK Firefox aussi) ne demande plus la page. Au lieu de cela, Safari/Webkit conserve une copie en mémoire de la précédente page visitée, de sorte que le retour est presque instantané. Dans cette situation, Safari conserve une copie exacte de celle-ci, y compris les valeurs des entrées. Dans une situation normale, cela pourrait être pratique pour l'utilisateur, et comme je l'ai dit je ne pense pas que Safari soit le seul à le faire (et même si c'était le cas, les autres navigateurs pourraient choisir de faire de même à l'avenir, vous ne devriez pas le cibler spécifiquement).

La désactivation de la mémoire cache pour l'action 'A' devrait faire l'affaire, car elle devrait obliger le navigateur à récupérer la page (et réinitialiser la valeur des entrées). Quelque chose comme ceci:

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

Si cela ne résout pas le problème, vous pourriez avoir à effacer les valeurs avec le javascript en cas onload de la page Web (ce qui devrait être assez trivial à voir avec jquery). Quelque chose comme:

$(document).ready(function() { 

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

}) 

Note: le code est non testé, mais j'espère que cela aide (si la désactivation du cache de la page échoue) :)

+0

Oui, c'est déjà fait. J'ai le problème uniquement dans le côté MAC du monde, je suppose, s'il y a un problème côté serveur, il sera reflété dans tous les navigateurs. – vijaysylvester

+0

Non, non, je ne voulais pas laisser entendre que le problème était du côté du serveur. J'ai ajouté une explication plus longue à ma réponse originale. – salgiza

+0

cela a très bien fonctionné pour moi, merci beaucoup –

-1

Essayez de régler autocomplete = "off" sur votre formulaire

Cela se produit également si vous actualisez la page sur firefox.

+0

Rien à voir avec autocomplétion. J'ai les valeurs de case à cocher persisté aussi bien. Devinez quel extrait de code JavaScript doit résoudre ce problème. – vijaysylvester

Questions connexes