2009-05-06 10 views
7

Existe-t-il un bon moyen d'affecter ViewData aux pages maîtres imbriquées? Par exemple, dans ma page principale de niveau supérieur, je peux avoir des informations sur l'utilisateur connecté. J'ai également une page maître imbriquée qui est affichée lorsque l'utilisateur est sur une page départementale. Je veux que ces données soient disponibles UNIQUEMENT sur les pages ministérielles.Affectation de ViewData aux pages maîtres imbriquées

C'est donc à quoi il ressemble:

Top Level Master Page - Includes ViewData["userData"] 
    | 
    | 
    ---> Nested Master Page - Includes ViewData["departmentalData"] 

Donc chaque fois que j'ai une vue qui utilise la page maître imbriquée il comprendrait à la fois ViewData [ « userData »] et Viewdata [ « departmentalData »]. Mais si j'utilise seulement la page principale de niveau supérieur alors j'ai seulement ViewData ["userData"]. Est-ce possible?

Répondre

1

Si vous insistez pour utiliser ViewData comme support de données pour les pages maîtres (au lieu d'utiliser Html.RenderAction (...) du projet MvcContrib que j'utiliserais probablement), alors si vous pouvez identifier dans quels cas masterpage imbriquée sera utilisé, vous pouvez configurer un ActionFilter pour entrer les données nécessaires dans ViewData ["departmentalData"].

0

Une possibilité consiste à écrire une méthode d'extension à la fois sur ViewPage et ViewMasterPage pour obtenir les données dont vous avez besoin. Je ne suis pas sûr, mais je pense que c'est ce que Rob Conery a fait dans son paquet Commerce.MVC. Jetez un coup d'oeil à ça.

0

Nous avons eu le même problème. Jusqu'à présent, nous avons créé une classe de base pour tous les contrôleurs et une méthode protégée pour générer ViewData. Nous l'appelons de toutes les actions qui utilisent cette page maître spécifique.

Je vais certainement suivre cette question pour voir ce que les autres ont imaginé.

0

Il existe un concept de sous-contrôleurs pour MVC (je ne suis pas sûr que ce soit encore présent et qu'il fasse son chemin dans le framework MVC). Vous pouvez le trouver dans le projet mvc contrib sur codeplex. Certains de description de poste ou d'un blog se trouve ici ...

http://mhinze.com/subcontrollers-in-aspnet-mvc/

et des objets passant à ce subcontroller est discuté ici ...

http://mhinze.com/passing-objects-to-subcontrollers/

Ce ne repose pas sur MasterPages mais pourrait vous aider ...

0

Tant que votre contrôleur est en train de définir le ViewData approprié pour la page qui sera affichée, le nombre de pages maîtres e étant utilisé. Ou est-ce que je manque quelque chose?