2012-02-06 100 views
1

我正在写一个自定义主题的果园模块。我希望将视图中的数据传回布局,以根据视图中确定的数据更改布局。果园CMS从视图到主题布局传递数据

在我的示例中,我的主题中有一个左侧导航栏 - 某些视图应该能够指示布局不呈现此左侧导航栏。

在标准的mvc 3中,我只是通过ViewBag传递值,但这似乎并没有在Orchard中工作 - 我猜布局代码是在View被渲染之前执行的?

我已经研究过使用Shape来移动这些数据,但看起来它可能是我想要实现的一点点重量级。

像这样传递数据作为ViewBag的替代方案的最佳做法是什么?

更新:在玩了一段时间后,我刚刚注意到TempData正在拾取布局 - 任何人都可以解释为什么TempData传输,但ViewData不是?从果园POV使用安全吗?

回答

3

比这更容易...所有模板都可以访问布局形状,这是一个动态对象。这意味着你可以随时修改它,添加属性等。 在你的特定情况下,抑制一个区域,你甚至可以将它设置为null:区域只是形状,而在顶部它们在布局上展开。因此,如果您有一个名为Foo的区域,将Layout.Foo设置为null应该可以实现。作为事实的事,我做的正是在我的主题之一,以抑制从我的错误页面的侧栏,而无需创建一个特定的部件层:

Layout.AsideFirst = null; 
Layout.AsideSecond = null; 
+0

稀释是这好得多!干杯! – 2012-02-06 21:14:56