質問: オーチャードCMSがビューからテーマへデータを渡す 私はカスタムテーマを使ってカスタムオーチャードモジュールを書いています。私はビューから決定されたデータに基づいてレイアウトを変更するために、ビューからレイアウトにデータを戻したいと思います。 私の例では、私のテーマにはleft-navがあります。特定のビューでは、このleft-navをレンダリングしないようにレイアウトを指示できなければなりません。 標準のmvc 3では、ViewBagを通して値を渡すだけですが、これはOrchard内では機能していないようです - Viewがレンダリングされる前にレイアウトコードが実行されていると思いますか? 私はシェイプを使ってこのデータを移動させましたが、達成しようとしているものが少し重いかもしれないように見えます。 このようなデータをViewBagに代わるものとして渡すベストプラクティスは何ですか? **Update:** After playing around with it a bit more i've just noticed that TempData is being picked up in the Layout - can anyone explain why TempData is transmitted, but ViewData isn't? And is it safe to use from an Orchard POV?
回答: それより簡単です...すべてのテンプレートは、動的オブジェクトであるレイアウトシェイプにアクセスできます。つまり、その場で変更したり、プロパティを追加したりすることができます。 あなたの特定のケースでは、ゾーンを抑制すると、それをnullに設定することさえできるかもしれません。ゾーンは単なるシェイプであり、トップレベルゾーンの場合はレイアウト上のexpandosです。だからあなたがFooという名前のゾーンを持っているならば、Layout.Fooをnullに設定することはそのトリックを行うべきです。実際の問題として、私は私のテーマの1つで、特定のウィジェットレイヤーを作成することなく、エラーページからサイドバーを隠すことを正確に行っています: ``` Layout.AsideFirst = null; Layout.AsideSecond = null; ```