OutputCache empêche mon nom d’utilisateur de s’afficher dans l’en-tête

Sur mon site Web, j’ai un en-tête défini dans mon _Layout.cshtml. Dans ce fichier, je fais ceci:

 

Je souhaite donc afficher de manière dynamic le nom de mon élément de menu, ainsi que le contenu, que l’utilisateur soit connecté ou non.

99% des méthodes de tous mes contrôleurs implémentent l’atsortingbut [OutputCache]. Pour cette raison, une fois que je me suis connecté au site, l’élément de menu indique toujours “Profil” avec les éléments de menu correspondants qui vont avec Profil (aussi appelé Inscription, mot de passe oublié, etc.).

Dois-je désactiver la mise en cache sur mon site pour que le nom d’utilisateur s’affiche immédiatement après la connexion? Cela fonctionne parfaitement dans mon environnement de développement car j’utilise les instructions #IF DEBUG autour de mes atsortingbuts de mise en cache …

Par exemple, voici mon HomeController:

 #if !DEBUG [OutputCache(Duration = 86400)] #endif public class HomeController : Controller { public ActionResult Index() { return View(); } } 

J’ai utilisé la bibliothèque de mise en cache de donut (mentionnée par Spender dans les commentaires ci-dessus) pour résoudre un problème très similaire.

Une fois que votre projet a une référence à la bibliothèque MvcDonutCaching, vous pouvez appeler une méthode Html.Action étendue pour l’exclure du cache, par exemple:

 // Action(this HtmlHelper htmlHelper, ssortingng actionName, ssortingng controllerName, bool excludeFromParentCache) @Html.Action("LoginStatus", "Home", true) 

Pour ce faire, vous devez évidemment isoler la partie que vous ne souhaitez pas mettre en cache avec ses propres actions et vues partielles.