You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AjaxControlToolKit 3.02迁移至16.1:ScriptObjectBuilder缺失适配方案咨询

解决AjaxControlToolkit 16.1中ScriptObjectBuilder.GetScriptReferences()的替代方案

我帮你搞定这个迁移问题——在AjaxControlToolkit 16.1版本里,ScriptObjectBuilder类确实已经被彻底移除了,这是因为高版本重构了脚本加载机制,改用更高效、模块化的方式来管理脚本引用。下面分场景给你具体的替代方案:

场景1:页面/母版页中加载AjaxControlToolkit脚本

如果原来的代码是为了确保页面加载所有必要的AjaxControlToolkit脚本,现在只需要在页面中添加ToolkitScriptManager控件即可,它会自动根据页面上使用的控件,按需加载对应的脚本,不需要手动获取和注册:

<ajaxToolkit:ToolkitScriptManager runat="server" ID="ToolkitScriptManager1" />

这种方式不仅替代了原来的GetScriptReferences()功能,还能提升页面性能(只加载需要的脚本,而非全部)。

场景2:自定义服务器控件中注册脚本引用

如果你的代码是在自定义控件里调用GetScriptReferences()来注册依赖脚本,现在需要实现IScriptControl接口,通过标准的ASP.NET脚本控件机制来管理脚本:

using System.Collections.Generic;
using System.Web.UI;
using AjaxControlToolkit;

public class MyCustomControl : Control, IScriptControl
{
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        if (!DesignMode)
        {
            // 注册当前控件到ScriptManager
            ScriptManager.GetCurrent(Page).RegisterScriptControl(this);
        }
    }

    // 替代原来的GetScriptReferences,返回控件依赖的脚本
    public IEnumerable<ScriptReference> GetScriptReferences()
    {
        // 示例:返回AjaxControlToolkit的核心通用脚本
        yield return new ScriptReference("AjaxControlToolkit.Common.Common.js", "AjaxControlToolkit");
        // 根据你的控件实际依赖,添加对应的脚本资源路径
    }

    public IEnumerable<ScriptDescriptor> GetScriptDescriptors()
    {
        // 如果不需要脚本描述符(比如不需要向客户端传递控件属性),返回空集合即可
        return new List<ScriptDescriptor>();
    }
}

额外说明

新版本的AjaxControlToolkit采用了模块化脚本加载策略,ToolkitScriptManager会自动追踪页面上的AjaxControlToolkit控件,只加载所需的脚本文件,这比旧版本一次性加载所有脚本的方式更高效。所以除非你有特殊的自定义场景,否则优先让ToolkitScriptManager自动管理脚本引用即可。

内容的提问来源于stack exchange,提问作者ronit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:37:00