我们在 .NET 3.5 SP1 上运行。
最近,在 IE 中,我们的一些用户开始偶尔出现“内存不足”错误。这不会一直发生。我设法复制了几次,我发现来自 AjaxControlToolkit.Common.Common.js 文件的这段代码导致了无限循环:AjaxControlToolkit.TextBoxWrapper.registerClass('AjaxControlToolkit.TextBoxWrapper', Sys.UI.Behavior) ;AjaxControlToolkit.TextBoxWrapper.validatorGetValue = function(id) { var control = $get(id);if (control && control.AjaxControlToolkitTextBoxWrapper) { return control.AjaxControlToolkitTextBoxWrapper.get_Value();} return AjaxControlToolkit.TextBoxWrapper._originalValidatorGetValue(id); }
最后一行(调用_originalValidatorGetValue)基本上一遍又一遍地回调这个确切的函数,因为control.AjaxControlToolkitTextBoxWrapper 是未定义的。
在它上面定义的函数是 AjaxControlToolkit.TextBoxWrapper.get_Wrapper(control),如果它不存在,可以用来创建包装器,但我不觉得我想改变框架,如果我是只有在野外见过这种虫子的人。
该错误并不总是发生。当加载的第一个 URL 包含 AJAX 历史记录点时,似乎会发生这种情况。如果您打开一个页面并使用它,导致添加历史记录点,它可以正常工作。但是如果你将 URL 复制粘贴到另一个浏览器窗口中,你就会遇到这个问题。
因此,我的猜测是我对没有正确设置包装器的历史控制做错了。即便如此,那里似乎有一个无限循环。
有什么想法/线索吗?
我在 Microsoft Connect 上填写了错误报告。在填写并测试各种场景时,我注意到它在本地运行良好,但在远程运行不佳。比较我的生产/开发环境,我注意到 CombineScripts 在本地是错误的。将其部署到我的生产服务器似乎已经解决了这个问题。
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=373171