如何在“母版页”级别实现逻辑

时间:2011-03-08 16:16:49

标签: c# asp.net-mvc-3 razor layout-page

我还是MVC的新手,所以忍受我: - )

我有一个我正在处理的社区网站,我希望在用户登录后显示我的所有网页上有多少用户在线。

我有一个共享视图,用作登录后所有页面的布局(UserLayout.cshtml)

我可以以某种方式添加逻辑以显示我的共享布局的在线计数吗?

如果是WebForms,我的主页只会有一些代码隐藏,但这显然不是一个选项。

有关在线用户的信息是从缓存中获取的。它不能在我的任何View Models上作为属性使用。

4 个答案:

答案 0 :(得分:8)

您可以编写一个呈现信息的动作(使用非常小的视图)

然后,您可以调用Html.Action从布局页面中呈现它。

答案 1 :(得分:1)

您可以创建“UserLayoutModel”类,并从中派生所有其他视图模型。您还可以使用“RenderAction”使UI的一部分单独呈现(确保使用ChildActionOnly属性标记此操作)。

答案 2 :(得分:0)

我所做的是创建一个所有控制器继承的BaseController.cs,在基本控制器中你可以覆盖OnActionExecuting,你在这里设置的任何viewdata值都可以在你的母版页上使用。

protected override void OnActionExecuting(ActionExecutingContext filterContext) {
    base.OnActionExecuting(filterContext);
}

答案 3 :(得分:0)

您可以创建全局操作过滤器。

通常,您将Action Filter作为属性添加到方法或类([HttpPost])。使用全局Action Filter,您可以向每个Action添加代码,而无需从特定类继承。就像你为每个Action方法添加了一个属性。

This article explains a lot.