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 widokiTo 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.