Bonjour à tous,
Je cherche à faire un peu de "Donut Caching" dans une application web en ASP.NET MVC 4 en me basant sur cet article mais je rencontre un petit souci...
Je suis dans un cas assez classique :
- Un Layout commun entre la plupart des vues de mon application.
- Ce Layout a une vue partielle où on retrouve le nom de l'utilisateur si celui-ci est connecté.
- J'aimerais pouvoir placer un attribut OutputCache sur certaines de mes actions tout en faisant un peu de "Donut caching" dans ma vue partielle histoire de ne pas avoir le nom de l'utilisateur en cache (ou de passer par un varybycustom basé sur l'user, ce qui serait dommage et ne serait pas bien utile...).
Voici le code qui appelle la substitution dans ma vue partielle :
Et mon petit Helper de test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <span class="firstIt"> Connecté en tant que <a href="#">@{ Response.WriteSubstitution(DonutHelper.RenderUserName);}</a> </span>
Bref, rien de bien méchant... Le problème rencontré : le nom de l'utilisateur n'apparaît pas à l'endroit d'appel de mon Response.WriteSubstitution mais en tout début du body...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public static class DonutHelper { public static string RenderUserName(HttpContext context) { return context.User.Identity.Name; } }
Est-ce normal comme comportement ? J'ai tenté de ne pas fait ça dans ma vue partielle (directement dans le Layout) ou dans une vue "classique" et le comportement reste le même.
Après recherche, il semblerait que ça fonctionnait bien en ASP.NET MVC 1 (peut-être 2... mais plus 3 et encore moins 4 on dirait !)
J'ai tout de même croisé cet article (partie Donut Caching) qui reprend le même fonctionnement et c'est sensé parler d'ASP.NET MVC 4 (j'ai justement commandé le livre... si les parties intéressantes sont fausses, ce serait décevant...)
Si je ne trouve pas de quoi le faire fonctionner, je m'orienterai vers d'autres solutions telles que MvcDonutCaching mais je voulais éviter ça avec le code trouvé sur ton tutoriel...
Un grand merci d'avance !
Denis
Partager