【问题标题】:Orchard CMS: Invoking two actions leads to duplicate notificationsOrchard CMS:调用两个操作会导致重复通知
【发布时间】:2013-05-21 11:06:21
【问题描述】:

我们的 Orchard 应用程序显示添加到通知服务的所有通知中的两个。到目前为止,我们已经追踪了问题并知道是什么原因造成的,但正在寻找一种不明显的解决方案,原因我现在将详细说明。

所以我们使用了许多主题来呈现我们基于 Orchard 的应用程序。在我们的布局中,我们有一个 Razor 调用来绘制一个标题栏,该标题栏显示一组有关已登录用户的信息。

@Html.Action("OutOfGameHeader", "Options", new { area = "Area.area.Location.Common" })

此操作调用 Orchard.UI.Notify.NotifyFilter 中的 OnResultExecuting() 方法,该方法(除其他外)使用当前通知集填充消息区域。当我们调用渲染消息区域时,同样的方法再次运行,通知再次添加到区域的形状中,导致在实际绘制区域时显示重复的通知。

谁能想到满足以下条件的解决方案:

  • 在不调用@Html.Action() 的情况下绘制标题以避免第一次触发OnResultExecuting()。
  • 无需在新区域中创建新小部件,因为这将涉及我们更改数十个现有主题的清单以包含它。

我们还在代码中将通知添加到区域的位置下方发现了这一点,因此,如果有人对此有所了解,那也会有所帮助。

//todo: (heskew) probably need to keep duplicate messages from being pushed into the zone like the previous behavior
//baseViewModel.Messages = baseViewModel.Messages == null ? messageEntries .Messages.Union(messageEntries).ToList();
//baseViewModel.Zones.AddRenderPartial("content:before", "Messages", baseViewModel.Messages);

任何想法都非常感谢。

【问题讨论】:

    标签: c#-4.0 razor orchardcms orchardcms-1.6


    【解决方案1】:

    避免使用 Html.Action。这贯穿整个生命周期,就好像这是一个新请求。你认为你需要它通常表明你需要重构并提取你想要从控制器中重用的逻辑。在 Orchard 中,最好使用动态形状。

    【讨论】:

    • +1 Html.Action 和 Html.RenderAction 是邪恶的:) 正如 Bertrand 所写,这清楚地表明您的代码需要重构,因为您的控制器中有太多逻辑。
    猜你喜欢
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多