5

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

因此,例如,如果这就是布局 TBB 中的全部内容,那么它可以工作(在我的真实代码中,tcms 当然是真实的):

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

但这并不

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

第一个打印以“<”开头的组件的内容,而第二个根本不做任何事情。我不想在页面模板的开头直接有任何标记,我希望第一件事是组件。可能吗?

4

3 回答 3

3

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

也许你可以尝试:

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

它不会呈现任何额外的标记,但可能会欺骗调解员做你想做的事(尽管就像我说的,我无法复制你的问题,所以无法验证它是否存在)。

于 2012-06-27T14:42:45.933 回答
2

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

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

这将呈现页面上的每个组件,无论预定义的架构或模板如何。但是,您的问题表明其他地方存在问题。您的页面模板生成什么样的输出(请注意使用复合模板的页面模板,该复合模板又包括您在此处描述的 Razor TBB)。它是 .aspx、HTML 还是其他?组件模板的输出是什么?它是一个 HTML 片段,还是其他什么?

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

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

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

于 2012-06-27T14:06:31.483 回答
1

有点破解,但你有没有尝试过:

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

或者

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

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

于 2012-06-27T14:10:47.570 回答