我有一个自定义宏方法,它返回一个字符串数组的字符串数组,其值要在Text / XML转换中输出。转换被用作Datalist中的项模板。我无法弄清楚如何从当前数据项动态获取值。似乎DataItem
无法解决 - 以下GetValue
调用没有任何输出。使用CurrentDocument
显然会解析页面而不是数据项。
<tr>
<td>{% SKUNumber %}</td>
{% foreach (spec in Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass, "RelatedModelsTable")) { %}
<td class="hidden-xs">{% GetValue(DataItem, spec) %} </td>
{% } #%}
</tr>
有没有办法在Text / XML转换中访问当前数据项?或者我是否需要切换到ASCX转换?
答案 0 :(得分:2)
假设您正在使用Kentico v10,那么您正在寻找Object
宏。
使用索引器,您可以指定一列来从以下位置检索数据:
{% Object[columnName] %}
在你的情况下,它将是:
<tr>
<td>{% SKUNumber %}</td>
{% foreach (spec in Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass, "RelatedModelsTable")) { %}
<td class="hidden-xs">{% Object[spec] %}</td>
{% } #%}
</tr>
这是一个通用示例,适用于那些需要没有任何自定义宏的示例的人。这将动态呈现DocumentID
,DocumentName
和NodeAliasPath
,指定数组中的列,而不是对其进行硬编码。
<tr>
{% columns = "DocumentID,DocumentName,NodeAliasPath"; foreach (column in columns.Split(",")) { %}
<td>{% Object[column] %} </td>
{% } #%}
</tr>
修改强>
由于Kentico v9没有用于转换的Object
宏,因此动态解析重复项的值的一种方法是使用Util.ResolveMacroExpession
,并提供列名作为参数。
重复的项目字段已注册为named sources,因此无法使用索引器或宏方法访问它们。
以下是问题作者的相同示例,修改为在Kentico v9中工作:
<tr>
<td>{% SKUNumber %}</td>
{% foreach (spec in Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass, "RelatedModelsTable")) { %}
<td class="hidden-xs">{% Util.ResolveMacroExpression(spec) %}</td>
{% } #%}
</tr>
答案 1 :(得分:0)
你必须给我们提供正确答案的方案
如果您的{%Util.GetSpecFieldsForPageType(CurrentDocument.NodeClass,“RelatedModelsTable”)%}返回IEnumbrable,您可以使用ApplyTransformation