如何在每个页面上显示会员详细信息?

时间:2013-06-20 00:53:52

标签: asp.net-mvc razor-2

我希望能够在每个页面上显示有关成员(“用户”)的各种详细信息 - 即显示部分登录详细信息的部分内容。

例如,stackoverflow在每个页面上显示我的用户名,我的声誉和徽章。

stackoverflow example

由于我们喜欢坚持使用ViewModel,因此填充ViewModel并将其传递给每个页面似乎是明智的。 ViewModel将包含成员对象(可能还有其他数据)。

执行此操作的一种方法是创建一个抽象的“基础”ViewModel类,并让您通常使用的所有其他ViewModel都从中继承。这看起来有点麻烦,因为你制作的每个ViewModel都必须从基础开始。恼人的?

另一种方法是使用HttpContext.User.Identity

另一种方法是创建自定义WebViewPage。

但是对于这两种可能性我已经被告知不推荐它,因为它“不是非常MVC-ish”。也就是说,它不符合我们在MVC中做事的自然方式。

我该如何解决这个问题? ViewModels是可行的吗?

C#或VB.NET是可以接受的。

2 个答案:

答案 0 :(得分:6)

创建一个部分返回用户信息的控制器,在布局页面中使用Html.Action()调用控制器。我很久以前写的一篇博文,您可以查看: http://kazimanzurrashid.com/posts/viewdata-or-viewbag-avoid-dependency-pollution-in-asp-dot-net-mvc-controller

答案 1 :(得分:1)

虽然我通常会避免使用ViewBag,但在传递用户信息时我会例外。在我的基本控制器中,我将为ViewBag.UserInfo设置onActionExecuted,并且所有视图都可以使用以下内容:

@{
    var userInfo = ViewBag.UserIno as UserInfo;
}

如果使用接口或抽象基础,则需要确保所有查看模型的用户填充用户字段。这确实增加了视图模型的开销。