2009-10-28 4 views
2

Est-il possible d'effacer le cache d'une action d'une autre action?ASP.NET MVC: Effacer le cache d'une action d'une autre action

Supposons que mon action Index répertorie tous mes widgets. Il y a beaucoup de Widgets mais de nouveaux ne sont pas créés très souvent. Je veux donc mettre en cache indéfiniment mon action d'index, mais la forcer à afficher après une création réussie.

public class WidgetController : Controller 
{ 
    [OutputCache(Duration = int.MaxValue, VaryByParam = "none")] 
    public ActionResult Index() 
    { 
     return View(Widget.AllWidgets); 
    } 

    public ActionResult Create() 
    { 
     return View(); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(string name) 
    { 
     Widget widget = new Widget(name); 

     // Can I clear Index's cache at this point? 
     // ClearCache("Index"); 

     return View(widget); 
    } 
} 
+0

duplication possible de [Comment "invalider" des portions de cache de sortie ASP.NET MVC?] (Http://stackoverflow.com/questions/1288463/how-to-invalidate-portions-of-asp-net-mvc -output-cache) – bzlm

Répondre

4

HttpResponse.RemoveOutputCacheItem?

+0

Merci, m'a conduit à la question suivante, qui a répondu un peu plus à fond: http://stackoverflow.com/questions/1288463/how-to-invalidate-portions-of-asp-net-mvc-output-cache – Lobstrosity

0

à mon humble avis, si vous appelez l'action Create vous ne touche pas le cache parce que vous êtes juste du rendu une vue et non la redirection vers l'action Index dont la sortie a été mis en cache.

+0

Droit. Je ne suis pas préoccupé par la mise en cache Créer. Mais lorsque l'action Créer un POST se produit, je veux effacer par programme le cache d'Index afin que le prochain hit sur Index reflète le nouveau widget. – Lobstrosity

2

Utilisez une propriété VaryByCustom pour expirer le cache chaque fois qu'un nouveau widget est ajouté.

Questions connexes