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网站上提出了一个有关此问题的问题。

07-24 09:49