RenderComponentPresentation在任何其他标记之前Tridion Razor Page

时间:2012-06-26 19:41:28

标签: templates razor tridion

我在Tridion 2011中有一个页面模板,其中Razor代码基于RenderComponentPresentation()打印信息作为页面中的第一件事。之前没有其他标记,因为组件而不是页面包含初始标记。除非我在发布的输出中的第一个RenderComponentPresentation之前放置至少一个字符,否则模板拒绝呈现任何演示文稿。

所以,例如,如果这就是布局TBB中的所有内容(这在我的实际代码中,tcms当然是真实的):

<
@RenderComponentPresentation("tcm:mytcm","tcm:myothertcm")

但这不是

@RenderComponentPresentation("tcm:mytcm","tcm:myothertcm")

第一个打印前面带有“&lt;”的组件的内容,而第二个打不出任何内容。我不希望在页面模板的开头直接有任何标记,我希望第一件事就是组件。有可能吗?

3 个答案:

答案 0 :(得分:3)

我刚刚使用最新版本的Razor Mediator(1.2)在Template Builder中进行了快速测试,无法复制您的问题。

也许你可以试试:

<text></text>
@RenderComponentPresentation("tcm:mytcm","tcm"myothertcm")

它不会渲染任何额外的标记,但是可以欺骗调解员做你想做的事情(虽然我说过,我不能复制你的问题所以可以&#39; t验证是否确实如此。

答案 1 :(得分:2)

通常使用Razor,您可以遍历页面上的任何和所有组件演示文稿,现在我正在使用

@foreach(var cp in ComponentPresentations){
   @cp.RenderComponentPresentation()
}

这将呈现页面上的每个组件,无论预定义的架构或模板如何。然而,您的问题在其他地方提出了问您的页面模板生成什么样的输出(请使用复合模板来考虑其页面模板,复合模板又包含您在此处描述的Razor TBB)。是.aspx,HTML还是其他?什么是组件模板的输出?它是一个HTML片段,还是其他什么?

就语法而言,除了模板调用之外,它应该没问题:

@RenderComponentPresentation("tcm:x-xxx-xx", "tcm:xx-xxx-xx")

我觉得这段代码只有在HTML标签中使用时才有效,但这只是一种预感。

答案 2 :(得分:1)

有点黑客,但你试过了吗?

<text>@RenderComponentPresentation("tcm:x-xxx-xx", "tcm:xx-xxx-xx")</text>

@Html.Raw(RenderComponentPresentation("tcm:x-xxx-xx", "tcm:xx-xxx-xx"))

免责声明:没有真正使用Razor调解员。只是剃刀。