我正在尝试在转换中显示语言选择器。
如果我将网页部件添加到网页中,但在转换中定义它们并不起作用,它就可以正常工作。
这是我目前在转型中的内容,但转发器只显示"没什么!"。
<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>
答案 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 ?