3

我正在向具有一些 ASP.Net 控件的项目添加一个新控件。每个控件本质上都包含一个 .Net 类(继承 ScriptControl)和一个 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(),所以以所需的顺序返回可枚举的引用集合会起作用吗?IE:

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;
}
4

1 回答 1

2

是的,这会起作用。如果在 GetScriptReferences 中您将指定您控制所需的脚本引用的完整集合,那么这将起作用。注意:脚本管理器根本不会添加重复的脚本引用。但这里的重点是您需要指定您的控件所依赖的脚本的完整集合。

我还建议看看它在 Ajax Control Toolkit 中的实现方式(或者例如在 Telerik ASP.NET Ajax Controls 中使用相同的方法)。存在 ClientScriptResource 和 RequiredScript 属性以及 ScriptObjectBuilder 帮助类,可帮助解决此类排序问题。

于 2012-11-13T19:20:31.000 回答