2010-11-12 5 views
3

Dans mon application, je me souviendrai du choix de la langue de l'utilisateur en session. Le problème est que si j'utilise le cache de sortie, la fonction de changement de langue ne fonctionnera pas, car elle met en cache le résultat lorsque je récupère de la base de données en fonction de la valeur Session ["lang"]. Donc, si j'ai une autre méthode pour utiliser la fonction de cache? Ou comment puis-je diminuer le temps de réponse?Comment utiliser outputcache dans cette situation?

Répondre

1

Une partie de l'infrastructure de mise en cache de sortie est le mécanisme VaryBy, qui permet à ASP.NET de conserver des caches parallèles de la même page, modifiés par certaines données, comme une chaîne de requête. Dans ce cas, le mécanisme VaryByCustom peut être le plus simple à implémenter. Here's a short article with a good example.

D'abord, l'attribut de mise en cache:

[OutputCache(CacheProfile = "CachedPage")] 
public ActionResult Index() 
{ 
    return View(); 
} 

Le profil de cache:

<caching> 
    <outputcachesettings>    
     <outputcacheprofiles> 
      <add varybycustom="Language" 
       varybyparam="*" 
       duration="86400" 
       name="CachedPage" /> 
     </outputcacheprofiles> 
    </outputcachesettings> 
</caching> 

Et enfin, la logique personnalisée dans Global.asax.cs:

public override string GetVaryByCustomString(
    HttpContext context, 
    string arg) 
{ 
    if (arg == "Language") 
    { 
     return Session["lang"].ToString(); 
    } 
    else 
    { 
     return base.GetVaryByCustomString(context, arg); 
    } 
} 

maintenant Pour chaque valeur unique que Session["lang"] renvoie, ASP.NET conservera un c en cache opy de la page exécutée sous ce paramètre.

+0

je lis quelque chose comme ça avant, mais il semble ne fonctionne pas, il met en cache toujours le résultat. – MemoryLeak

+1

@MemoryLeak lorsqu'il est mis en œuvre correctement, je vous assure que cela fonctionne très bien. –

+2

J'ai trouvé le Context.Session est nul, il n'est pas censé être nul! Quoi de neuf ? – MemoryLeak

-1

Enregistrer cette valeur dans les cookies, session ne sont pas disponibles dans GetVaryByCustomString

+0

Cela devrait être un commentaire. –

Questions connexes