1

我接手了一个项目(ASP.Net AJAX,JSON),我有一个页面加载一个包含 1,430 个条目的大型选择(组合框)列表,并且在我们的主(登陆)搜索页面上加载没有问题。

问题:加载我们编辑或插入的页面时,我在MicrosoftAjaxTemplates.debug.js 中收到以下错误。搜索页面和编辑页面的区别在于涉及到 ajax 数据绑定。

Microsoft JScript runtime error: 并且没有其他信息。

function Sys$UI$Template$compile()线:

element._msajaxtemplate = [this.instantiateIn = new Function("_containerElement", "$dataItem", "$index", "_referenceNode", "$parentContext", "_instanceId", code), nestedTemplates];

这是元素内部 html 的一部分(删除了大多数选项;但是,有 1,430 个选项):

select style="width: 500px;" id="ddl_1_CompanyID_53f3ff5f-3070-4473-b8d9-e4055e29e0e9" önchange="UpdateObserver('CompanyID', this.value);" class="queryfield" title="Company" fieldbinding="CompanyID" LoadOnDemand="false" sys:value="{{CompanyID}}" width="500px" showcode="False" descfield="CompanyDescription" codefield="CompanyID" queryid="1" lookupid="1" sys:attach="dataview"> option value="0">(None) /option> /select> ... 1,429 options...

如果我将整个 HTML 粘贴到jsfiddle.net中,则选择列表(组合框)会呈现列出的所有选项(无错误)。

我认为用于构建选择列表的数据是罪魁祸首,所以我采用了二进制排序方法,删除了一半的数据并且错误消失了。我测试了另一半,没有错误;但是,对于所有 1,430 个选项,我得到了错误。

尝试的解决方法 下一个方法是在选择列表(组合框)的焦点上加载数据。在主页上,没问题...控件具有列表填充的焦点。在 PrettyPhoto 页面上没有错误;但是,列表是空的。使用Fiddler2,我看到 JSON 数据被传回,我可以在 javascript 中发生绑定的地方设置一个断点;但是,选择列表(组合框)为空。

我遇到了PrettyPhoto的其他问题,并阅读了以下内容,帮助我解决了日期选择器问题:“'prettyPhoto' 每次触发时都会创建一个新的 DOM,因此 datepicker 绑定到的 'focus' 事件不存在在您的灯箱中的 DOM 元素上“来源

我觉得同样的问题与未加载的选择列表有关。只是不知道如何解决这个问题。

调试 删除了漂亮照片的使用,问题仍然存在(这个问题似乎是绑定和数据量)。在 IE 9(或 8)中,我得到了原始问题。在 FireFox 和 Chrome 中……一切都很好。

一段时间以来,我一直在努力解决这个问题,任何能引导我走向正确方向的建议或提示将不胜感激。

4

1 回答 1

0

最终的解决方案是不将所有数据预加载到下拉列表中;但是,按需加载数据。如果用户按下“A”键,所有以“A”开头的数据都会加载列表并且没有错误。

于 2014-05-02T22:28:09.947 回答