2009-06-04 6 views
5

J'ai la situation suivante sur une webapp:Mise en cache des vues partielles en asp.net MVC

Une table "Employés" contient la colonne "Département" et "Fonction". Les deux sont des listes déroulantes.

Les options de la liste déroulante "Fonction" dépendent du "rayon" sélectionné. (donc chaque département a sa propre liste de fonctions)

Lors d'un changement de département, je fais un appel ajax à une action du régulateur avec le paramètre "DepartmentId". Theres un attribut [outputcache] sur le controlleraction afin que les fonctions qu'il retourne soient mises en cache pour chaque ID de service.

Mon problème est le chargement initial de la page. Pouvez-vous appeler un controlleraction en vue et profiter de la mise en cache?

Quelqu'un? 30 vues et pas de réponses .. Des remarques à propos de ma question? Trop évident? trop dur? trop bizarre? quelque chose pour google (bien que je n'ai pas trouvé une solution là-bas)?

Répondre

4

Phil Haack a écrit un petit billet de blog sur un sujet similaire appelé Donut Hole Caching. C'est un bon point de départ.

+0

ne sais plus si cela l'a corrigé mais je marque comme réponse de toute façon .. –

0

Voulez-vous dire que vous voulez appeler l'action du contrôleur qui génère les fonctions directement lors de la génération de la vue et non avec ajax? Si j'ai bien compris, je ne pense pas qu'il soit possible d'obtenir les données dans le cache de sortie (j'ai peut-être tort). Quoi qu'il en soit, si vous pouviez l'obtenir, il vous faudrait encore décoder les données.

Vous pouvez aussi

  • Cache le département vous IDs HttpContext.Cache et de les utiliser dans les deux actions (peut-être que ce si vite que vous n'avez pas besoin OutputCache plus et ne dispose pas du double
  • Ou si le nombre de départements/fonctions n'est pas si grand, vous pouvez créer une structure json avec toutes les fonctions, les stocker dans la vue et ne pas utiliser ajax du tout.
4

J'utiliserais des sous-contrôleurs ou mieux encore des demandes partielles pour faire ce que vous demandez. Dans une page typique, j'ai tendance à ne pas mettre en cache toute la page, mais à la place diviser les zones en différentes méthodes d'action qui sont appelées via des demandes partielles. De cette façon, je peux avoir un cache de sortie sur chaque zone avec des expirations différentes. C'est plus de cycles de vie de page, mais quand ils sont mis en cache, ils ne sont pas une taxe sur la performance. Il est également beaucoup plus facile de maintenir et d'optimiser une zone spécifique si elle commence à sous-performer. Dans mon expérience, cela correspond également très bien avec les modèles ajax car vous "obtenez" tous vos données à partir d'une seule méthode d'action.

demandes partielles sont discutées here et here sous-contrôleurs

Hope this helps.

Questions connexes