2010-05-25 8 views
1

J'ai besoin que certaines données soient disponibles sur toutes les pages d'affichage du site Web. Les données proviennent d'un paramètre fourni à toutes les routes, je veux obtenir ce paramètre et obtenir les données correspondantes pour cela et le rendre disponible pour toutes les vues (y compris les pages maîtres).Pages d'affichage Mvc et données personnalisées pour toutes les pages

Ce serait bien si cela pouvait être fait en un seul endroit.

Que dois-je faire pour obtenir cette fonctionnalité, peut-il même être fait?

Greetz, Richard.

Répondre

0

Le moyen le plus (peut-être pas le meilleur) serait d'écrire une classe de base de contrôleur qui

1) gère l'un des événements suivants pour faire le travail:

  • OnActionExecuted
  • OnActionExecuting
  • OnResultExecuted
  • OnResultExecuting

2) Définit les données que vous voulez avoir dans ViewData.

3) Utilisez le ViewData de vos vues.

4) Tous vos contrôleurs doivent hériter de votre contrôleur de base personnalisé.

Cela peut ne pas être la plus belle de toutes les approches que j'essaie habituellement d'éviter l'héritage comme la peste, mais cela va fonctionner. Autres options.

1) Implémentez-le dans un filtre ActionFilter et assurez-vous d'ajouter l'attribut à toutes les méthodes ActionMethod.

2) Utilisez quelque chose comme MVC Turbine pour définir le déclencheur d'ActionFilter pour toutes les méthodes ActionMethod de votre application ASP.NET MVC.

+0

Merci, le problème avec viewdata est qu'il n'est pas tapé donc je dois le lancer chaque fois que j'ai besoin des données. Y a-t-il une solution pour cela? – Richard

+0

Le projet MVCContrib peut être utile, car il a écrit un ensemble d'extensions qui vous permettent d'extraire des données de ViewData (IDictionary ) d'une manière fortement typée. http://mvccontrib.codeplex.com/documentation?referringTitle=Home –