如何在Tridion中的剃刀模板中获取对象?

Pri*_*pta -6 tridion razor-mediator

我正在编写一个常见的Razor TBB,它将根据我的要求在组件模板和页面模板中使用.

因此,根据在页面模板和组件模板上应用TBB,我需要剃刀TBB中的页面和组件对象

我要求在页面的特定区域中显示/使用页面/组件中的元数据字段值.

这就是为什么,我想通过对象访问元数据值但无法获取对象,

请跟我对弗兰克的评论.

任何人都可以建议我吗?

Fra*_*len 8

你有没有看过Razor调解员可用的(非常有帮助的)文档?

这些都是访问当前Component和Page的示例.只是我的10秒搜索给出了这些片段:

<body class=”@Page.Metadata.BodyClass”>

<div class=”@Component.Fields.NewsStyle”>

<img src=”@Fields.HeaderImage.ID” alt=”@Fields.HeaderImage.AltText” />
Run Code Online (Sandbox Code Playgroud)

编辑:我看到您在后续评论中添加了更多详细信息.您可能想要像Bart建议的那样做,并将这些细节添加到问题中.与此同时,我会花几分钟时间为您搜索文档.

官方文档(我上面链接的Word文档)包含这个似乎处理元数据的示例:

@foreach (var keyword in Publication.MetaData.SomeKeywordFields) {
    <li>@keyword.Title (@keyword.Id)</li>
}
Run Code Online (Sandbox Code Playgroud)

Razor模板的输出将成为 Package中的Output项.因此,使用Razor介体处理 Output项没有任何意义.为此,您可以使用常规的C#(片段或程序集)TBB.

另一个编辑:看起来Razor介体的隐式Fields变量总是映射到Component字段,Metadata变量总是映射到Component的meatadata字段.为方便起见,我已将上述名称与Google代码上的相关片段相关联.

所以你似乎有两个选择:

  1. 检测你是在页面还是组件中(例如通过查看是否隐式Page变量null)然后在任何地方都有条件表达式(isInPage ? Page.Metadata : Metadata)
  2. 自己修复Razor中介代码的这种限制,或雇用某人为您修复它

  • 您***应该***也真正将这些额外的细节添加到您的原始问题.你已经收到很多票数,很可能部分是因为这个问题没有显示你的任何努力.事实证明,你做的不仅仅是最初提出的问题.因此,如果您更新问题,人们可能会更加看好它.它也有助于意识到这里的大多数人更喜欢调试代码而不是调试你的散文.所以共享代码,而不是描述它的作用. (3认同)