Kentico 9 - 在转换中显示语言选择器

时间:2016-06-01 05:03:58

标签: asp.net kentico

我正在尝试在转换中显示语言选择器。

如果我将网页部件添加到网页中,但在转换中定义它们并不起作用,它就可以正常工作。

这是我目前在转型中的内容,但转发器只显示"没什么!"。

<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>

3 个答案:

答案 0 :(得分:2)

问题是您的数据源没有返回任何数据。

如果您不需要在转换中动态生成数据源的属性,我建议您将一个语言数据源Web部件放在工作正常的页面上,并参考其中的Node转化

语言数据源Web部件可能缺少上下文中的内容。在内部,DS的DocumentContext.CurrentDocument属性使用<% %>,这可能在转换中不可用。无论是这个还是Enn所说的关于具有不同周期的控件。

另一种选择是将自定义C#代码放在{"Brand":"fat-re32","Temp":16} 括号内,并以编程方式检索所需的数据。

答案 1 :(得分:1)

这是一个非常好的问题,我发现在转换 ASPX模板中使用Web部件通常存在很多混淆。

这里的要点是

  

转换或ASPX模板中通常不支持

由于Web部件通常是用户控件,因此您可以在转换中注册它们,但由于它们的特定生命周期,因此无法保证它们实际可以正常工作。更复杂的Web部件肯定不会起作用,这似乎也适用于语言选择器。

官方documentation指出:(见更新)

在转换中使用控件

  

您可以注册并使用用户   控件和服务器控件内部转换。看完了   转型例子。但是,在转换中使用Web部件   出于性能原因,不建议使用。

但是,这并不完全准确,因为它们并非支持。我已经提交了一份关于Kentico技术写作的请求来解决这个问题。

您最终可能会尝试从语言选择器中进行常规的用户控制并进行注册,但我并不完全确定它是否会有所帮助。我知道一些Kentico默认转换确实正在注册用户控件,因此在某些情况下它可能会有所帮助。

一般来说,尽可能避免在转换中使用用户控件。我建议您只将语言选择器Web部件放在转换之外,这将是让它在没有任何其他调整的情况下正常工作的最简单方法。

更新:

在与Kentico团队交谈后,注释here已更改为反映当前状态:

  

我们不建议在代码中使用Web部件   转换。这可能导致性能不佳和某些网络   由于它们的寿命,部件可能无法在转换中正常工作   周期。

答案 2 :(得分:-1)

我同意Enn,转发器控制生命周期可能存在问题,因为它会动态添加到页面中。 您是否尝试使用 CMSRepeater 控件而不是 BasicRepater 并将 DelayedLoading 属性设置为 true