Razor MVC, gdzie umieścić zmienne globalne dostępne na stronie wzorcowej, widoku częściowym i widoku?

Hello Razor MVC Gurus:

Pytanie nowego użytkownika.

Tło. Mam niestandardową IIdentity, która jest ustawiona w HttpModule, zanim dotrze do kontrolera i widoków. Aby z niego skorzystać, muszę to zrobić

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

Problem polega na tym, że używam obiektu w różnych miejscach, takich jak

układ głównyNiektóre zagnieżdżone układy na poziomie podrzędnymNiektóre częściowe widokiNiektóre widoki

To naprawdę zależy od właściwości obiektu „MyComplexUser”, których potrzebują widoki.

Obecnie w widokach muszę wykonać naprawdę skomplikowany casting, aby dostać się do nieruchomości. Na przykład, jeśli chcę „nazwę” użytkownika, muszę to zrobić

@ (((MyComplexUser) (((MyIdentity) ((GenericPrincipal) context.User) .Identity) .User)). Name)

Przypuszczam, że mógłbym umieścić go w kontrolerach, a następnie zapełnić ViewBag właściwością ViewBag.MyUser, ale potem

Nie lubię używać ViewBag. Preferuję obiekty silnie wpisaneJeśli używam silnie wpisanego obiektu („MyUser”) dla widoków, to muszę popularne wszystkie modele z właściwością „MyUser”. Czujesz się trochę brudny? Chciałbym, aby moje modele były czyste i dostosowane do poglądów, z którymi są związane. Poza tym staje się niepotrzebnie powtarzalny.W miejscach takich jak master_layout.cshtml lub częściowe wywiady, jak uzyskać dostęp do „MyUser”, jeśli umieściłem je w kontrolerze?Używaj RenderAction i buduj częściowe przeglądy dla każdej właściwości Użytkownika jest przesadą?

Dzięki. Ponownie jestem nowicjuszem w MVC 4, każda sugestia jest bardzo wdzięczna.

questionAnswers(1)

yourAnswerToTheQuestion