2016-06-01 2 views
2

Я пытаюсь отобразить селектор языка внутри преобразования.Kentico 9 - Выбор языка отображения внутри преобразования

Он работает, если я добавляю веб-части на страницу, но определение их внутри преобразования не работает.

Это то, что у меня есть в настоящее время внутри моего преобразования, но ретранслятор просто отображает «Nothing!».

<cms:LanguageDataSource ID="dsLanguages" ExcludeUntranslatedDocuments="false" ExcludeCurrentCulture="false" runat="server" /> 

<ul class="sub-menu"> 
    <cms:BasicRepeater ID="rptLanguages" DataSourceName="dsLanguages" ZeroRowsText="Nothing!" runat="server"> 
    <ItemTemplate> 
     <li class="menu-item"> 
     <a href="<%# Eval("URL") %>"><span class="flag-icon flag-icon-<%# Eval("CultureCode") %>"></span><%# Eval("CultureName") %></a> 
     </li> 
    </ItemTemplate> 
    </cms:BasicRepeater> 
</ul> 

ответ

1

Это действительно хороший вопрос, и я вижу, что там, как правило, много путаницы об использовании веб-частей внутри Transformations или шаблоны ASPX.

Основным моментом здесь является то, что

веб-части не вообще поддерживаются в преобразованиях или шаблоны ASPX

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

Официальные documentation гласит, что: (SEE UPDATE)

Использование элементов управления преобразованиями

Вы можете зарегистрировать и использовать пользовательский элементы управления и серверы управления внутри преобразований. Смотрите, что сделано Примеры трансформации. Однако, по соображениям производительности, использование веб-частей в преобразованиях не рекомендуется.

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

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

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

UPDATE:

После разговора с командами Kentico записка here была изменена, чтобы отразить текущее состояние:

Мы не рекомендуем использовать веб-часть в коде преобразований.Это может привести к низкой производительности, а некоторые узлы сети могут не работать должным образом при трансформациях из-за их срока службы. .

+0

Спасибо за четкий и подробный ответ! Я думаю, что сейчас попытаюсь перейти на маршрут управления пользователями. Если это не удается, мне может понадобиться полностью переустановить меню в пользовательскую веб-часть. –

+0

Добро пожаловать! Я был в контакте с техническими писателями, и они уже обновили документацию, чтобы отразить текущее состояние. Я также обновил свой ответ. Спасибо за вопрос и надеюсь, что вы можете заставить его работать нормально :) – Enn

-1

Я согласен с Enn, возможно, существует проблема с циклом управления ретранслятором, поскольку он динамически добавляется на страницу. Вы пробовали использовать CMSRepeater управления вместо BasicRepater с DelayedLoading собственности установлен в истинной?

2

Проблема в том, что ваш источник данных не возвращает никаких данных.

Если вам не нужно динамически генерировать свойства источника данных при преобразовании, я предлагаю вам разместить веб-часть источника данных на странице, где она работает нормально, и ссылаться на ее Web part control ID в преобразовании.

Исходная веб-часть источника данных, вероятно, отсутствует из контекста. Внутренне свойство Node DS использует DocumentContext.CurrentDocument, который может быть недоступен при преобразовании. Это либо то, что Энн говорит о том, что элементы управления имеют разные циклы.

Другим вариантом было бы размещение пользовательского кода C# внутри скобок <% %> и получение данных, которые вам нужны программно.

+0

Спасибо за ответ скалистый! У меня есть несколько вариантов, поэтому я посмотрю, как это происходит. –

Смежные вопросы