我正在编写一个常见的Razor TBB,它将根据我的要求在组件模板和页面模板中使用。
因此,根据在页面模板和组件模板上应用TBB,我需要剃刀TBB中的Page和Component对象
我要求在页面的特定区域显示/使用页面/组件中的元数据字段值。
这就是为什么,我想通过对象访问元数据值,但无法获取对象,
请跟弗兰克跟进我的评论。
任何人都可以建议我吗?
答案 0 :(得分:8)
您是否看过Razor调解员可用的(非常有帮助的)文档?
这些都是访问当前组件和页面的示例。只是我的10秒搜索给出了这些片段:
<body class=”@Page.Metadata.BodyClass”>
<div class=”@Component.Fields.NewsStyle”>
<img src=”@Fields.HeaderImage.ID” alt=”@Fields.HeaderImage.AltText” />
编辑 :我看到您在后续评论中添加了更多详细信息。您可能想要像Bart建议的那样做,并将这些细节添加到问题中。与此同时,我会花几分钟时间为您搜索文档。
官方文档(我上面链接的Word文档)包含这个似乎处理元数据的示例:
@foreach (var keyword in Publication.MetaData.SomeKeywordFields) {
<li>@keyword.Title (@keyword.Id)</li>
}
Razor模板的输出将 变为 包中的输出项。因此,使用Razor介体来 处理 输出项目没有任何意义。为此你可以使用常规的C#(片段或程序集)TBB。
另一个编辑 :似乎Razor介体的隐式Fields
变量始终映射到Component字段,而Metadata
变量始终映射到Component的meatadata字段。为方便起见,我已将上述名称与Google代码中的相关片段相关联。
所以你似乎有两个选择:
Page
变量是否为null
)然后在任何地方都有条件表达式(isInPage ? Page.Metadata : Metadata
)