Asp.net Kentico 9-转换内部的显示语言选择器
我试图在转换中显示语言选择器 如果我将web部件添加到页面中,但在转换中定义它们不起作用,那么它就可以工作 这是我当前在转换中所做的,但是中继器只显示“Nothing!”Asp.net Kentico 9-转换内部的显示语言选择器,asp.net,kentico,Asp.net,Kentico,我试图在转换中显示语言选择器 如果我将web部件添加到页面中,但在转换中定义它们不起作用,那么它就可以工作 这是我当前在转换中所做的,但是中继器只显示“Nothing!” 这是一个非常好的问题,我发现在转换或ASPX模板中使用Web部件通常存在很多困惑 这里的要点是 转换或ASPX模板通常不支持Web部件 由于Web部件通常是用户控件,您可以在转换中注册它们,但由于它们的特定生命周期,无法保证它们实际工作。更复杂的web部件肯定无法工作,语言选择器似乎也是如此 该官员表示:(见更新)
-
这是一个非常好的问题,我发现在转换或ASPX模板中使用Web部件通常存在很多困惑
这里的要点是
转换或ASPX模板通常不支持Web部件
由于Web部件通常是用户控件,您可以在转换中注册它们,但由于它们的特定生命周期,无法保证它们实际工作。更复杂的web部件肯定无法工作,语言选择器似乎也是如此
该官员表示:(见更新)
在转换中使用控件
您可以注册并使用用户
控件和服务器控件内部的转换。把这件事做完
转换示例。但是,在转换中使用web部件
出于性能原因,不建议使用
但是,这并不完全准确,因为它们根本不受支持。我已经向肯蒂科的技术人员提交了一份请求,要求他们对此进行补救
您最终可以尝试从语言选择器中创建一个常规的用户控件,并注册它,尽管我不完全确定它是否有用。我知道一些Kentico默认转换确实正在注册用户控件,因此在某些情况下可能会有所帮助
一般来说,尽可能避免在转换中使用用户控件。我建议您将语言选择器web部件放在转换之外,这将是在不进行任何其他调整的情况下使其正常工作的最简单方法
更新:
与Kentico团队交谈后,注释被更改以反映当前状态:
我们不建议在的代码中使用web部件
转变。这可能会导致性能低下,并导致某些web应用程序出现问题
零件可能因其使用寿命而无法在转换中正常工作
循环
我同意Enn的观点,中继器控制生命周期可能有问题,因为它是动态添加到页面的。
您是否尝试使用CMSRepeater控件而不是BasicRepater,并将DelayedLoading属性设置为true?问题在于您的数据源没有返回任何数据 如果您不需要在转换中动态生成数据源的属性,我建议您将语言数据源web部件放在工作正常的页面上,并在转换中参考其
web部件控件ID
语言数据源web部件可能缺少上下文中的某些内容。在内部,DS的节点
属性使用转换中可能不可用的DocumentContext.CurrentDocument
。要么是这样,要么就是Enn所说的控制有不同的周期
另一个选择是将自定义C#代码放在
括号内,并以编程方式检索所需的数据。感谢您提供清晰详细的回答!我想我现在会尝试用户控制路线。如果失败了,那么我可能需要将菜单完全修改为自定义web部件。不客气!我一直与技术作者联系,他们已经更新了文档以反映当前状态。我也更新了我的答案。谢谢你的问题,希望你能让它正常工作:)谢谢你的回答!我现在有一些选择,所以我会看看进展如何。
<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>