【问题标题】:AjaxControlToolkit combobox substitute for a large number of itemsAjaxControlToolkit 组合框替代大量项目
【发布时间】:2011-09-01 04:33:53
【问题描述】:
我有一个使用我们的 ASP.NET 4.0 Web 应用程序的位置,它运行了大约 2 年。我去现场进行升级,发现其中一个页面只是空白,IE 8 将完全停止响应。经过调查,我发现页面上的一个组合框有 8000 多个项目。该页面在 IE7、IE9、Firefox 和 Chrome 中加载良好。我查看了 Ajax Control Toolkit 站点上的文档,他们说我应该使用 Auto Complete Extender,因为我有这么多的记录。我认为它在任何浏览器中都不起作用只是时间问题。该设施使用 IE8,所以我目前让它们以兼容模式运行;然后我告诉他们开始删除他们不再需要的旧记录。但是,我需要开始研究替代品。 Auto Complete Extender 的问题在于它不能像组合框那样工作。有谁知道一个好的方法?我需要在代码隐藏中保留 DataSource 和 DataBinding 样式。此外,重新设计不是一种选择。我需要该列表来包含任何给定设施的所有访客。
【问题讨论】:
标签:
.net
asp.net
ajax
ajaxcontroltoolkit
【解决方案1】:
对于 8000 个项目,我建议使用一个按需填充和过滤(不在 Page_Load 上)的控件,并且不会将所有项目保留到 ViewState。
不幸的是,按需填充和过滤不利于保持 DataSource 和 DataBinding 样式不变。剩下的就是尝试将控件与 EnableViewState="false" 一起使用,并通过所有可用的方式最小化页面大小,首先是使用压缩。在 IIS 中,enable dynamic compression。我认为这些步骤不会解决性能问题,但您应该从使用 YSlow 或其他工具分析页面大小开始。例如,如果页面具有可选元素,例如客户特定的组合框,请确保仅实际填充正在使用的元素。通过不填充未使用的控件并为它们禁用 ViewState,我已经能够将页面大小缩小一半以上。设置 Visible="false" 是不够的。
至于替代方案,我使用 Telerik RadCombobox 具有类似的项目计数和性能问题。设置 EnableViewState="false" 显着提高了回发速度,但加载时间仍然不可接受。切换到load on demand 有所帮助,但引入了在没有 ViewState 的情况下保持选定状态的新问题。按需填充组合框意味着每次在 UI 中打开组合框时,都会在 ItemsRequested 事件中执行数据绑定。这与使用带有 AutoCompleteExtender 和页面方法的普通 TextBox 大致相同。您可能可以在此处重用大部分 Page_Load 时间数据绑定代码。
总的来说,我在 jQuery UI autocomplete 和 Ajax 请求方面拥有最好的体验,但这需要进行更广泛的重新设计。