-6

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

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

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

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

还请跟进我对弗兰克的评论。

任何人都可以建议我吗?

4

1 回答 1

8

您是否查看过 Razor 调解器可用的(非常有用的)文档?

这些充满了访问当前组件和页面的示例。只是我的 10 秒搜索给出了这些片段:

<body class=”@Page.Metadata.BodyClass”&gt;

<div class=”@Component.Fields.NewsStyle”&gt;

<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 模板的输出将成为Package 中的 Output 项。所以使用 Razor 调解器来处理输出项没有任何意义。为此,您不妨使用常规的 C#(片段或程序集)TBB。

另一个编辑:似乎 Razor 中介的隐式Fields变量总是映射到组件字段,而Metadata变量总是映射到组件的肉类数据字段。为方便起见,我已将上述名称链接到 Google 代码上的相关片段。

所以你似乎有两个选择:

  1. 检测您是否在页面或组件中(例如,通过查看隐式Page变量是否null存在),然后到处都有条件表达式(isInPage ? Page.Metadata : Metadata
  2. 自己修复Razor 中介代码的此限制或聘请某人为您修复它
于 2012-08-09T17:33:12.307 回答