模板内的Kentico宏方法不起作用

时间:2015-01-07 00:58:52

标签: c# asp.net macros kentico

我最近一直在研究Kentico网站,最近发生了以下问题,并且从未想过这不起作用。

我在Kentico 8上有一个模板,我想显示存储在当前文档类型的'ContentText'字段中的内容。

因此,我使用以下代码:

<cms:CMSDocumentValue runat="server" AttributeName="ContentText" FormattingString="{0}" />

这工作绝对正常。但是,如果我去使用宏,如下所示:

<%# CurrentDocument.GetStringValue("ContentText", String.Empty) %>

根本不会提取存储在该字段上的内容。 谁知道我哪里错了?我很确定语法是正确的。

我想使用宏的原因是因为我可能正在使用它来检查值是否为null,因此我可以更改占位符的可见性。

希望有人可以帮助我。

谢谢。

1 个答案:

答案 0 :(得分:4)

Kentico宏(K#)未在页面模板标记中自动解析。此外,数据绑定表达式(<%# ... %>)中不允许使用K#。通常,在页面模板中,您可以使用以下代码解析宏:

<%@ Import Namespace="CMS.MacroEngine" %>
<%= MacroContext.CurrentResolver.ResolveMacros("{% here comes your macro expression %}")%>

如果我正确理解你的问题,你想根据当前页面字段的值在页面中隐藏一些asp:PlaceHolder控件。此代码可能对您有所帮助,而不是调用宏:

<%@ Import Namespace="CMS.DocumentEngine" %>
<script runat="server">
  protected void Page_Load(object sender, EventArgs e)
  {
    yourPlaceHolderControl.Visible = !String.IsNullOrEmpty(DocumentContext.CurrentDocument.GetStringValue("Intro", String.Empty));
  }
</script>