2010-01-14 5 views
0

Pour mon cas, j'ai un contrôleur, qui interroge ensuite l'utilisateur en utilisant RedirectResult, qui a effectivement fait un en-tête "Location".Le cache de sortie mvc d'Asp.net ne fonctionne pas avec RedirectToAction

Puis-je appliquer la cache au contrôleur comme celui-ci

[OutputCache(Duration = int.MaxValue, VaryByParam = "none", NoStore=false)] 

je tente de relancer la page, et je vérifie sur mon Linq profileur, je encore capable de voir toute la requête de cette page re courir comme 1s.

Comment puis-je éviter que cela se produise?

+0

Je ne sais pas si quelqu'un peut vous aider. Je pense que nous devons voir les actions du contrôleur. – jfar

+0

que voulez-vous dire par là? Je pensais que le cache de sortie mettra en cache toute la page, inclure l'en-tête, ai-je raison? s'il inclut l'en-tête, il ne devrait pas réexécuter le contrôleur, à mon avis. – DucDigital

Répondre

1

Vous pouvez faire le cache manuel, au lieu d'utiliser le cache de sortie, qui cache vos requêtes:

public IQueryable<Category> FindAllCategories() 
{ 
    if (HttpContext.Current.Cache["AllCategories"] != null) 
     return (IQueryable<Category>)HttpContext.Current.Cache["AllCategories"]; 
    else 
    { 
     IQueryable<Category> allCats = from c in db.Categories 
              orderby c.Name 
              select c; 

     // set cache 
     HttpContext.Current.Cache.Add("AllCategories", allCats, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(0, 0, 30, 0, 0), System.Web.Caching.CacheItemPriority.Default, null); 
     return allCats; 
    } 
} 
+0

Si c'est la réponse que vous avez trouvée, vous devriez envisager de l'accepter. –

+0

devrait être en mesure d'accepter par demain, dan :) – DucDigital