Здравствуйте, Razor MVC Gurus:
Новый вопрос.
Фон. У меня есть пользовательский параметр IIdentity, который установлен в HttpModule, прежде чем он попадает в контроллер и представления. Чтобы использовать его, я должен сделать
MyIdentity myIdentity = (MyIdentity)((GenericPrincipal)context.User).Identity;
MyComplexUser user = myIdentity.User;
//user.name //user.location //user.username //etc
Проблема заключается в том, что я использую объект в разных местах, например
- мастер-макет
- Некоторые вложенные макеты на уровне уровня
- Некоторые частичные просмотры
- Некоторые представления
Это зависит от того, какие свойства объекта MyComplexUser нужны для просмотра.
В настоящее время во взглядах мне нужно сделать это очень сложное кастинг, чтобы добраться до свойства. Например, если я хочу "Имя" пользователя, мне нужно сделать
@(((MyComplexUser) (((MyIdentity) ((GenericPrincipal) context.User).Identity).user)). Имя)
Я предполагаю, что могу поместить его в контроллеры, а затем заполнить ViewBag с помощью свойства ViewBag.MyUser, но затем
- Мне не нравится использовать ViewBag. Я предпочитаю строго типизированные объекты
- Если я использую строго типизированный объект ( "MyUser" ) для представлений, тогда я должен популяризовать все эти модели с свойством "MyUser" . Чувствуешь себя немного грязным? Поскольку мне нравится сохранять мои модели в чистоте и быть конкретными для тех взглядов, с которыми они связаны. Кроме того, он становится излишне повторяющимся.
- В таких местах, как master_layout.cshtml или partialviews, как вы получаете доступ к "MyUser" , если я помещаю их в контроллер?
- Использовать RenderAction и создавать частичные просмотры для каждого свойства User является излишним?
Спасибо. Опять же, я новичок в MVC 4, любое предложение очень ценит это.