Метод макроса Kentico внутри шаблона не работает

Недавно я работал над сайтами Kentico, и недавно возникла следующая проблема, и я никогда не думал, что это не сработает.

У меня есть шаблон на Kentico 8, и я хочу отобразить содержимое, хранящееся в поле «ContentText» текущего типа документа.

Итак, для этого я использую следующий код:

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

который работает абсолютно нормально. Однако, если я пойду и использую макрос, как показано ниже:

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

он вообще не будет извлекать содержимое, хранящееся в этом поле. Кто-нибудь знает, где я ошибаюсь? Я почти уверен, что синтаксис правильный.

Причина, по которой я хочу использовать макрос, заключается в том, что я могу использовать его, чтобы проверить, является ли значение нулевым или нет, поэтому я могу изменить видимость заполнителя.

Надеюсь, кто-то может помочь мне в этом.

Спасибо.


person Jordan    schedule 07.01.2015    source источник
comment
Вы можете попробовать ‹%# IfEmpty(Eval(ContentText),,Eval(ContentText)) %›   -  person Jerreck    schedule 07.01.2015
comment
@Jerreck .. Как я уже упоминал выше, этот код должен идти по шаблону, поэтому Eval вообще не будет работать.   -  person Jordan    schedule 07.01.2015


Ответы (1)


Макросы 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>
person Ondra Machala    schedule 07.01.2015
comment
В конце концов, вы можете захотеть разрешить выражения локализации, такие как {$general.OK$}. В этом случае вам необходимо передать настройки преобразователя макросов с указанием культуры в метод ResolveMacros. Например. ResolveMacros("expression", new MacroSettings() { Culture = CurrentDocument.DocumentCulture }) - person Ondra Machala; 14.09.2015