脚本控件Web资源加载顺序

3

我正在为一个包含ASP.Net控件的项目添加新的控件。每个控件实际上由一个继承ScriptControl的.Net类和一个javascript文件组成。每个js文件都作为WebResource添加到程序集中。

[assembly: WebResource("Assembly.Namespace.WidgetControl.js", "text/javascript")]
[assembly: WebResource("Assembly.Namespace.CogControl.js", "text/javascript")]

我想从另一个javascript资源中的“类”继承,因为否则我将需要复制/粘贴该js类中一些函数代码,这样做很丑陋,也不利于维护。我不喜欢重复努力。
现在,我需要的是WebResource的加载顺序。假设,仅供演示目的,我想从WidgetControl.js类中继承,并使用ThingaMahBobControl.js进行扩展。是否在Widget之后添加ThingaMahBob的WebResource程序集引用可以保证加载顺序?
我不能从尚未加载的内容继承,所以这很重要。由于控件正在继承抽象的ScriptControl,它必须实现GetScriptReferences(),所以按所需顺序返回可枚举的引用集合是否有效?即:
protected override IEnumerable<ScriptReference> GetScriptReferences()
{
    List<ScriptReference> refs = new List<ScriptReference>();
    refs.Add(new ScriptReference("Assembly.Namespace.WidgetControl.js", this.GetType().Assembly.FullName));
    refs.Add(new ScriptReference("Assembly.Namespace.ThingaMahBobControl.js", this.GetType().Assembly.FullName));
    return refs;
}
1个回答

2

是的,这个方法可以起作用。如果在 GetScriptReferences 中明确指定了控件所需的所有脚本引用的完整集合,则此方法可以起作用。请注意:ScriptManager 不会添加重复的脚本引用。但这里的关键点是,您需要指定控件所依赖的全部脚本的完整集合。

我还建议您查看 Ajax Control Toolkit 中的实现方式(或例如 Telerik ASP.NET Ajax Controls 中使用的相同方法)。存在 ClientScriptResource 和 RequiredScript 属性以及 ScriptObjectBuilder 辅助类,它们有助于解决这种类型的排序问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接