你好 Razor MVC 大师:
新手问题。
背景。我有一个自定义 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)).Name)
我想我可以把它放在控制器中,然后用 ViewBag.MyUser 属性填充 ViewBag,但是然后
- 我不喜欢使用 ViewBag。我更喜欢强类型对象
- 如果我对视图使用强类型对象(“MyUser”),那么我必须使用“MyUser”属性来流行所有这些模型。感觉有点脏?因为我喜欢让我的模型保持干净,并具体到他们所涉及的视图。此外,它会不必要地重复。
- 在 master_layout.cshtml 或 partialviews 之类的地方,如果我将它们放在控制器中,您如何访问“MyUser”?
- 使用 RenderAction 并为每个 User 属性构建局部视图是一种矫枉过正吗?
谢谢。同样,我是 MVC 4 的新手,任何建议都非常感谢。