【问题标题】:How to implement logic at "masterpage" level如何在“母版页”级别实现逻辑
【发布时间】:2011-03-08 16:16:48
【问题描述】:

我还是 MVC 的新手,所以请耐心等待 :-)

我正在开发一个社区网站,我想在用户登录后显示有多少用户在我的所有页面上在线。

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

我能否以某种方式将显示在线计数的逻辑添加到我的共享布局中?

如果是 WebForms,我只会为我的母版页提供一些代码隐藏,但这显然不是这里的选项。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我所做的是创建一个所有控制器都继承自的 BaseController.cs,并且在基本控制器中,您可以覆盖 OnActionExecuting,并且您在此处设置的任何视图数据值都将可用于您的母版页。

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

        【讨论】:

          【解决方案4】:

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

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

          This article explains a lot.

          【讨论】:

            猜你喜欢
            • 2010-10-11
            • 1970-01-01
            • 2011-03-28
            • 1970-01-01
            • 1970-01-01
            • 2022-09-25
            • 2014-09-07
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多