CodePlex的AjaxControlToolkit于2013年7月发布introducing control bundles。
好的,您可以定义应用程序使用的控件:这样可以减少js包并提高应用程序的速度。
但是我对此版本有疑问:
我的ASP.NET网站有一个自定义控件,继承自AjaxControlToolkit.HTMLEditor.Editor
public class MyHtmlEditor : AjaxControlToolkit.HTMLEditor.Editor, IMyInterface
{
protected override void FillTopToolbar()
{
// my custom code
}
protected override void FillBottomToolbar()
{
// my custom code
}
}
直到今天,该控件仍然可以正常运行。
更新到最新版本后,该控件将无法使用,并引发异常。
这是堆栈:
[Exception: Could not load control MyWebSite.MyHtmlEditor.
The script reference(s) of this control was not loaded correctly.
If AjaxControlToolkit.config is used, probably this control is not registered properly.]
AjaxControlToolkit.ToolkitScriptManager.OnPreRender(EventArgs e) +722
System.Web.UI.Control.PreRenderRecursiveInternal() +113
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Control.PreRenderRecursiveInternal() +222
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4297
我不需要此新功能,也无法理解为什么没有明确的方法来激活它(默认情况下处于禁用状态)。
有人对此有更多了解吗?
我需要禁用此新功能,而不必转到旧版本。
所有帮助将不胜感激
编辑
仅当文件
AjaxControlToolkit.config
存在时,客户端脚本组合才有效,否则,它将加载所有脚本(默认方案)。
经过一些配置测试后,会引发相同的错误...
最佳答案
2013年7月发行的AjaxControlToolkit的代码库中有一个“问题”,其中涉及从控件包中解析控件的方式。
从Codeplex升级后,我遇到了与项目相同的问题。
这是我的问题和背景。
我有许多自定义控件使用和继承AjaxControlToolkit资源和脚本
自定义控件在第二个程序集中
每个控件都有一个ClientScriptResource并依赖于第三个自定义控件
因此,升级后,我创建了AjaxControlToolkit.config来注册自定义控件,并且开始了数小时的调试和痛苦工作。
如果没有更多有关上下文的信息,请执行以下步骤:
如上面的问题编辑中所述创建AjaxControlToolkit.config
您知道是否创建具有名称的控制包
对于自定义控件,很明显,需要指定控件组装和控件名称<control name="mynamespace.ModalPopupExtender" assembly="myassembly"></control>
在页面中将TooliktScriptManager
捆绑到<ControlBundles> <act:ControlBundle Name="ModalPanelBundle"/> </ControlBundles>
中
但是请耐心等待,AjaxControlToolkit通过程序集(如bundle tag的程序集属性中所写)以及通过将程序集属性值与控件名称属性值连接来解析控件,因此,例如,如果您拥有完整的控件,命名空间以不同的程序集名称形式出现,这里您将得到异常!
解决问题有两种方法,软和硬
柔软的
更改控件的名称空间以反映程序集名称部分,然后在捆绑软件中配置控件以获取正确的类型解析:
来自<control name="Tools.Web.UI.WebControls.ModalPopupExtender" assembly="CompanyX.ProjectY"></control>
到<control name="UI.WebControls.ModalPopupExtender" assembly="CompanyX.ProjectY"></control>
然后在代码中
来自namespace Tools.Web.UI.WebControls.ModalPopupExtender {.. public class ModalPopupExtender {} ...}
到namespace CompanyX.ProjectY.UI.WebControls.ModalPopupExtender {.. public class ModalPopupExtender {} ...}
硬
下载AjaxControlToolkit源代码
打开解决方案,然后找到AjaxControlToolkit.ToolkitScriptManagerConfig类
在第159行,将ToolkitScriptManagerHelper.GetAssembly(control.Assembly) .GetType(control.Assembly + "." + control.Name));
修改为ToolkitScriptManagerHelper.GetAssembly(control.Assembly) .GetType(control.Name));
保存,关闭VS2012,然后使用该批处理针对您的平台进行重建
通过硬方法,控制解析由名称attribtribu完成,因此您可以在其中指定完整的名称空间名称。
如果困难的方法太困难了,您可以与我联系以获取修改后的垃圾箱。
经过艰苦的努力之后,一切对我来说再次正常!
今天,我建议并在AjaxControlToolkit Codeplex网站上提出了一个有关此问题的问题。