Razor MVC, où mettre des variables globales accessibles à travers la page maître, partiview et vue?

Bonjour Rasoir MVC Gourous:

Newbie question.

Arrière-plan. J'ai personnalisé l'Identité est définie dans un HttpModule avant qu'il arrive à contrôleur & vues. Pour l'utiliser, je dois faire

   MyIdentity myIdentity = (MyIdentity)((GenericPrincipal)context.User).Identity;
   MyComplexUser user = myIdentity.User;
   //user.name //user.location //user.username  //etc

Le problème est, je utiliser l'objet dans différents endroits tels que

  • la disposition principale
  • Certains sous niveau imbriqués les mises en
  • Certains partialviews
  • Certains points de vue

Cela dépend vraiment de ce que les propriétés de "MyComplexUser" objet le point de vue le besoin.

Actuellement, dans les vues, que j'ai à faire ce vraiment compliqué de moulage pour obtenir une propriété. Par exemple, si je veux le "Nom" de l'utilisateur, j'ai besoin de faire

@(((MyComplexUser)(((MyIdentity)((GenericPrincipal)contexte.De l'utilisateur).D'identité).De l'utilisateur)).Nom)

Je suppose que je pourrais le mettre dans les contrôleurs et ensuite remplir le ViewBag avec un ViewBag.MyUser bien, mais alors

  1. Je n'aime pas utiliser ViewBag. Je préfère les objets fortement typés
  2. Si j'utilise un objet fortement typé ("MyUser") pour les vues, puis j'ai populaires de tous les modèles avec un "MyUser" de la propriété. Se sent un peu sale? Comme je tiens à garder mes modèles propres et spécifiques aux points de vue qu'ils sont engagés. En outre, il devient inutilement répétitif.
  3. Dans des endroits comme master_layout.cshtml ou partialviews, comment accédez-vous à la "MyUser" si je les ai mis dans un contrôleur?
  4. Utilisation RenderAction et de construire partialviews pour chaque propriété de l'Utilisateur est un overkill?

Grâce. Encore une fois, je suis un débutant à la MVC 4, toute suggestion est grandement apprécier.

source d'informationauteur Liming