AjaxControlToolkit组合框可替代大量项目

时间:2011-09-01 04:33:53

标签: .net asp.net ajax ajaxcontroltoolkit

我有一个位置使用我们的ASP.NET 4.0 Web应用程序运行正常约2年。我在现场进行了升级,发现其中一个页面只是空白,IE 8将完全停止响应。经过调查,我发现页面上的一个组合框有超过8000个项目。该页面在IE7,IE9,Firefox和Chrome中正常加载。我查看了Ajax Control Toolkit站点上的文档,他们说我应该使用Auto Complete Extender,因为我有如此多的记录。我认为它在任何浏览器中都不起作用只是时间问题。该设施使用IE8,所以我目前让它们以兼容模式运行;然后我告诉他们开始删除他们不再需要的旧记录。但是,我需要开始研究替代品。自动完成扩展器的问题在于它不像组合框那样工作。有谁知道一个好的方法?我需要在代码隐藏中保留DataSource和DataBinding样式。此外,重新设计不是一种选择。我需要该列表包含任何给定设施的所有访客。

1 个答案:

答案 0 :(得分:2)

对于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请求方面拥有最佳体验,但这需要进行更广泛的重新设计。

相关问题