2

CodePlex 的 2013 年 7 月 AjaxControlToolkit 版本引入了控制包

好的,您可以定义您的应用程序使用的控件:这减少了 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存在时才有效,

否则它将加载所有脚本(默认场景)。

经过一些配置测试,同样的错误被抛出......

4

1 回答 1

2

AjaxControlToolkit 2013 年 7 月版本的代码库中存在一个“问题”,即从Control Bundle解析控件的方式。

从 Codeplex 升级后,我在项目中遇到了与您相同的问题。这是我的问题和背景。

  • 我有许多自定义控件使用并继承自 AjaxControlToolkit 资源和脚本
  • 自定义控件在第二个程序集中
  • 每个都有一个 ClientScriptResource 和依赖于第三个自定义控件

所以升级后,我创建了AjaxControlToolkit.config来注册自定义控件,并且开始了我的调试和痛苦时间。没有更多关于上下文的文字,这是步骤:

  1. 如上面的问题编辑中所述,创建一个AjaxControlToolkit.config
  2. 创建一个有没有名字的控制包,你知道的
  3. 对于自定义控件,明确需要指定控件程序集和控件名称<control name="mynamespace.ModalPopupExtender" assembly="myassembly"></control>
  4. TooliktScriptManager通过 instert this 在包含捆绑包的页面中引用<ControlBundles> <act:ControlBundle Name="ModalPanelBundle"/> </ControlBundles>

但是等一下,挫败感来了,AjaxControlToolkit 通过程序集解析控件(如 bundle 标记的程序集属性中所写)并通过将程序集属性值与控件名称属性值连接起来,因此,例如,如果您拥有的控件具有完整的命名空间与程序集名称不同,在这里你会得到异常!

有两种方法可以解决问题,的和硬的

柔软的

更改控件的命名空间以反映程序集名称部分,然后在包中配置控件以获得正确的类型分辨率:例如。

<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 {} ...}

难的

  1. 下载 AjaxControlToolkit 源代码
  2. 打开解决方案,然后找到AjaxControlToolkit.ToolkitScriptManagerConfig
  3. 在第 159 行,修改ToolkitScriptManagerHelper.GetAssembly(control.Assembly) .GetType(control.Assembly + "." + control.Name));ToolkitScriptManagerHelper.GetAssembly(control.Assembly) .GetType(control.Name));
  4. 保存,关闭 VS2012,然后为您的平台使用批处理重建

使用硬方法,控制解析是通过名称属性完成的,因此您可以在那里指定完整的命名空间名称。

如果硬方法太难,您可以联系我获取修改后的垃圾箱。在应用了艰难的方式之后,一切对我来说都很好!

今天我建议并在 AjaxControlToolkit codeplex 网站上打开了一个关于此的问题。

于 2013-07-30T16:07:24.607 回答