1

我们的 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);

任何想法都非常感谢。

4

1 回答 1

2

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

于 2013-05-21T20:21:04.270 回答