我在Tridion 2011中有一个页面模板,其中Razor代码基于RenderComponentPresentation()打印信息作为页面中的第一件事。之前没有其他标记,因为组件而不是页面包含初始标记。除非我在发布的输出中的第一个RenderComponentPresentation之前放置至少一个字符,否则模板拒绝呈现任何演示文稿。
所以,例如,如果这就是布局TBB中的所有内容(这在我的实际代码中,tcms当然是真实的):
<
@RenderComponentPresentation("tcm:mytcm","tcm:myothertcm")
但这不是
@RenderComponentPresentation("tcm:mytcm","tcm:myothertcm")
第一个打印前面带有“&lt;”的组件的内容,而第二个打不出任何内容。我不希望在页面模板的开头直接有任何标记,我希望第一件事就是组件。有可能吗?
答案 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调解员。只是剃刀。