我正在编写一个带有自定义主题的自定义Orchard模块。我想将视图中的数据传回布局,以根据视图中确定的数据更改布局。
在我的例子中,我的主题中有一个左导航 - 某些视图应该能够指示布局不要渲染这个左导航。
在标准的mvc 3中,我只是将值传递给ViewBag,但这似乎不适用于Orchard - 我猜测布局代码是在渲染View之前执行的?
我已经研究过如何使用Shape移动这些数据,但看起来它可能对我正在努力实现的目标有点重量级。
像这样传递数据作为ViewBag的替代方法的最佳做法是什么?
更新:在玩了一下之后我才注意到TempData正在布局中被拾取 - 有人可以解释为什么TempData被传输,但ViewData不是吗?从Orchard POV使用是否安全?
答案 0 :(得分:3)
比这更容易......所有模板都可以访问布局形状,这是一个动态对象。这意味着您可以动态修改它,添加属性等。 在您的特定情况下,抑制区域,您甚至可以将其设置为null:区域只是形状,对于顶级区域,它们是布局上的expando。因此,如果您有一个名为Foo的区域,则将Layout.Foo设置为null应该可以解决问题。事实上,我在我的一个主题中正是这样做,以便在不必创建特定小部件层的情况下抑制错误页面中的边栏:
Layout.AsideFirst = null;
Layout.AsideSecond = null;