1

我使用了几个不同的 AjaxControlToolkit 控件。我最常使用的 4 个是 FilteredTextBoxExtender、CalendarExtender、TextBoxWatermarkExtender 和 MaskedEditExtender。上传到开发服务器后一切正常。但是,一旦在生产服务器上,我每天都会收到大约 3 到 5 封电子邮件,其中包含未处理的异常,而 AjaxControlToolkit 始终是问题所在。从它的外观来看,它通常发生在单击另一个控件或页面只是“坐”在那里而不在使用时。它说它“无法加载 AjaxControlToolkit.TextBoxWatermarkExtender”或类似的东西。并不是每一天都发生在每个人身上,但足以让人认为存在问题并且需要解决。作为唯一的开发商,我已经尝试对此进行测试,我让它“崩溃”的唯一方法是尽可能地重新加载页面。大约点击了 100 次后,它终于说无法加载其中一个 AjaxControlToolkits 扩展程序。这是我今天收到的最后一条错误消息。

来源

AjaxControl 工具包

日期和时间:

2013 年 11 月 14 日下午 1:45

信息:

无法加载控件 AjaxControlToolkit.TextBoxWatermarkExtender。此控件的脚本引用未正确加载。如果使用了 AjaxControlToolkit.config,则该控件可能没有正确注册。

堆栈跟踪:

在 AjaxControlToolkit.ToolkitScriptManager.ValidateScriptReferences() 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI .Control.PreRenderRecursiveInternal() 在 System.Web.UI.Control.PreRenderRecursiveInternal() 在 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)

我已经意识到,当这样的错误发生 8-10 次时,它是在运行 IE 8 的 PC 上。

这是另一个发生的错误,并且由于堆栈跟踪,它看起来也与 AjaxControlToolkit 有关。

资源:

mscorlib

日期和时间:

2013 年 11 月 14 日上午 7:48

信息:

收藏已修改;枚举操作可能无法执行。

堆栈跟踪: 在 System.Collections.Generic.List 1.Enumerator.MoveNextRare() at System.Linq.Enumerable.All[TSource](IEnumerable1 源,Func`2 谓词)在 AjaxControlToolkit.ToolkitScriptManagerCombiner.LoadScriptReferences(HttpContextBase 上下文,字符串 [] 包)在 AjaxControlToolkit.ToolkitScriptManager.LoadScriptReferences(HttpContextBase 上下文,字符串 [] 包,布尔forCombineAndMinify) 在 AjaxControlToolkit.ToolkitScriptManager.OnLoad(EventArgs e) 在 System.Web.UI.Control.LoadRecursive() 在 System.Web.UI.Control.LoadRecursive() 在 System.Web.UI.Control.LoadRecursive() 在 System .Web.UI.Control.LoadRecursive() 在 System.Web.UI.Control.LoadRecursive() 在 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔值 includeStagesAfterAsyncPoint)

我已经研究了这两种类型的错误,但没有发现任何有用的东西。我确实知道第二个通常是在经历一个循环并且值被改变或类似的东西时引起的。

我在几个网格视图中使用 AjaxControlToolKit 扩展器,所以它是否可能因为它们在网格视图中而无法加载?有人对此有解决方案吗?我绝对不得已的办法是使用 jQuery 来完成这些功能,但我不想这样做。任何建议都非常感谢!

4

1 回答 1

0

在使用旧的 AjaxControlToolkit(版本 7.0725)从 .NET 4.0 升级到 .NET 4.8 后,我在生产中遇到了相同的随机错误。

无法加载控件 AjaxControlToolkit.TabContainer。此控件的脚本引用未正确加载。如果使用了 AjaxControlToolkit.config,则该控件可能没有正确注册。

经过一些故障排除后,我们设法解决了更改代码的问题,如下所示:

从:

        <cc1:ToolkitScriptManager EnablePartialRendering="true" ScriptMode="Release" ID="TSM" runat="server" EnableScriptGlobalization="true" EnableScriptLocalization="true" AsyncPostBackTimeout="360000" LoadScriptsBeforeUI="false" CombineScripts="true" CombineScriptsHandlerUrl="~/CombineScriptsHandler.ashx">
            <CompositeScript>
                <Scripts>
                    <asp:ScriptReference Path="~/Scripts/jquery-3.2.1.slim.min.js" />
                    <asp:ScriptReference Path="~/bootstrap-3.3.7-dist/js/bootstrap.min.js" />
                </Scripts>
            </CompositeScript>
        </cc1:ToolkitScriptManager>

至:

        <cc1:ToolkitScriptManager ScriptMode="Release" ID="TSM" runat="server" EnableScriptGlobalization="true" EnableScriptLocalization="true" AsyncPostBackTimeout="360000" LoadScriptsBeforeUI="false" CombineScripts="False" />             

并将 JS 脚本文件移动到<HEAD>

<head>
    <script type="text/javascript" src="/Scripts/jquery-3.2.1.slim.min.js"></script>
    <script type="text/javascript" src="/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
</head>

总结:删除属性EnablePartialRenderingCombineScriptsHandlerUrl并设置CombineScriptsfalse; 并将各个脚本移至该<head>部分。

于 2021-12-21T15:26:17.170 回答