1

Orchard アプリケーションは、通知サービスに追加されたすべての通知のうち 2 つを表示します。これまでのところ、問題を追跡し、その原因を突き止めましたが、ここで詳しく説明する理由から、明白な解決策以外の解決策を探しています。

そのため、Orchard ベースのアプリケーションをレンダリングするために多くのテーマを使用しています。レイアウト内には、ログインしているユーザーに関する一連の情報を表示するヘッダー バーを描画するための Razor 呼び出しがあります。

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

このアクションは、Orchard.UI.Notify.NotifyFilter の OnResultExecuting() メソッドを呼び出します。これにより、現在の通知セットがメッセージ ゾーンに読み込まれます。Messages Zone をレンダリングする呼び出しを行うと、この同じメソッドが再び実行され、通知が Zone の形状に再度追加され、Zone が実際に描画されるときに通知が重複して表示されます。

次の条件を満たすソリューションを思いつく人はいますか。

  • @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 に答える