2013-05-21 17 views
1

我們的Orchard應用程序顯示兩個添加到通知服務的通知。到目前爲止,我們已經追蹤了這個問題,並且知道是什麼造成了這個問題,但是正在尋找一個明顯的解決方案,因爲我現在要詳細說明。Orchard CMS:調用兩個操作會導致重複通知

所以我們使用了許多主題來呈現我們的基於Orchard的應用程序。在我們的佈局,我們有一個剃刀調用繪製,顯示了一組有關已登錄用戶的標題欄。

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

此操作調用Orchard.UI.Notify的OnResultExecuting()方法。 NotifyFilter(其中包括)用當前通知組填充Messages區域。當我們將調用渲染爲消息區域時,同樣的方法再次運行,並且通知再次添加到區域的形狀,導致實際繪製區域時顯示重複的通知。

誰能想到,符合以下條件的解決方案:

  • 繪製頭無需調用@ 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); 

任何想法非常感謝。

回答

2

避免Html.Action。這貫穿整個生命週期,就好像這是一個新的請求。你認爲你需要它通常是一個標誌,你需要重構並提取你想要從控制器中重新使用的邏輯。在果園裏,使用動態形狀也更好。

+0

+1 Html.Action和Html.RenderAction是邪惡的:)正如Bertrand所寫,這清楚地表明你的代碼需要重構,因爲你的控制器中有太多的邏輯。 –