Orchard CMS:调用两个操作会导致重复通知

时间:2013-05-21 11:06:22

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

我们的Orchard应用程序显示添加到通知服务的所有通知中的两个。到目前为止,我们已经追踪了这个问题并知道是什么导致了这个问题,但是我正在寻找除了显而易见的解决方案之外的解决方案,原因我现在要详细说明。

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

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

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

任何人都可以想到符合以下标准的解决方案:

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

我们还发现这只是在代码中将通知添加到区域中的点之下,所以如果有人知道更多关于它的信息,那么这也会有所帮助。

//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);

任何想法都非常感激。

1 个答案:

答案 0 :(得分:2)

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