0

デフォルトの RenderMvcController をオーバーライドして、すべてのルートのカスタム RenderModel を出力する方法はありますか。ルートを乗っ取っている可能性がありますが、すべてのページで使用されるカスタム データを配置したいと考えています。

たとえば、e コマース サイトでは、すべてのページにバスケット情報が表示されます。理想的には、これはすべてのビューの RenderModel で利用できます。Basket 属性を持つ拡張レンダー モデルを出力するカスタム コントローラにデフォルト コントローラを変更する方法はありますか?

アップデート:

これは Umbraco 6.1.0+ でサポートされるようになりました。ドキュメントはこのページの最後にあります: http://our.umbraco.org/documentation/Reference/Mvc/custom-controllers

4

1 に答える 1

3

私が検討する解決策は、カスタムデータをUmbracoのデフォルトのページモデルにクローバーする代わりに、または同様のものBasketSurfaceControllerを使用してバスケットの内容を画面にレンダリングすることを検討することです。@Html.Action("HeaderDisplay", "BasketSurface")このようにして、ビューモデルを独立させ、必要な特定のページの一部として、_Layout.cshtmlまたは特定のページに表示させることができます。

また、このアプローチを使用すると、Umbracoのモデルから完全に分離して、すべて同じコントローラーによって供給される特定のバスケット関連ビューのコレクションを維持できます。

詳細については、子アクションに関するドキュメントを参照してください。

アップデート:

ドキュメントを読み直すと、これは4.10以降で非常に簡単に可能であることがわかります。ドキュメントはここにありますが、簡単に言うと、各ドキュメントタイプへのリクエストを上書きしたり、デフォルトのコントローラーを置き換えることですべてのリクエストを上書きしたりできます。

私はまだChildActionこの特定のシナリオのアプローチを提唱しますが、カスタムビューモデルを渡すためにドキュメントタイプコントローラーをオーバーライドすることは、ページに固有の事前に形成されたモデルを渡すのに理想的です(たとえば、コメント付きのブログエントリ。関連するカテゴリ)および/またはページ自体からは利用できないが、各ページで必要なデータ(サイト名、ドメイン、ロケール、グローバルトラッキング/アフィリエイトコード、メタデータなど)を含むモデルを渡す。

于 2012-11-24T19:36:51.540 に答える