2010-05-21 6 views
1

J'ai une application Web qui récupère beaucoup de contenu via ajax. Par exemple, lorsqu'un utilisateur modifie certaines données, le navigateur envoie les modifications à l'aide d'un post ajax, puis effectue un ajax pour obtenir un nouveau contenu et remplacer un div existant sur la page par ce contenu. Cela fonctionnait juste avec MVC1, mais dans MVC2 j'obtiendrais des résultats incohérents.ASP.NET MVC2 et la mise en cache du navigateur

J'ai trouvé que MVC1 incluait par défaut un élément Expires dans les en-têtes de réponse à l'heure actuelle, mais dans MVC2 l'en-tête Expires est manquant. C'est un problème avec certains navigateurs (IE8) qui utilisent la version mise en cache de l'ajax à la place de la nouvelle version. Pour résoudre le problème, j'ai créé un simple ActionFilterAttribute qui définit le cache de réponse à NoCache (voir ci-dessous), ce qui fonctionne, mais il semble assez sordide de décorer chaque contrôleur avec cet attribut. Existe-t-il un moyen global de définir ceci pour chaque contrôleur?

Est-ce un bogue dans MVC2 et il devrait vraiment définir les expires sur chaque ActionResult/view/page? La plupart des programmes MVC ne traitent-ils pas de la saisie de données où les données périmées sont une très mauvaise chose?

Merci

Dan


public class ResponseNoCachingAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     base.OnResultExecuted(filterContext); 

     filterContext.HttpContext.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); 
    } 
} 

Répondre

4

Avez-vous essayé d'ajouter l'attribut suivant à votre contrôleur?

[OutputCache(Location = OutputCacheLocation.None)] 
+0

Oui, cela fonctionnera. Je n'ai pas remarqué cet attribut avant. Il semble toujours idiot que vous deviez mettre cet attribut sur chaque contrôleur au lieu d'avoir un paramètre global quelque part. Merci. – Dan

+4

Vous pouvez déclarer un contrôleur de classe de base abstrait correctement nommé avec l'attribut et tous vos contrôleurs en héritent. –

Questions connexes