我正在向具有一些 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()
,所以按所需顺序返回引用的可枚举集合是否可行?即:
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;
}
最佳答案
是的,这会起作用。如果在 GetScriptReferences 中您将指定您控制所需的脚本引用的完整集合,那么这将起作用。注意:脚本管理器不会简单地添加重复的脚本引用。但这里的重点是您需要指定您的控件所依赖的脚本的完整集合。
我还建议查看它在 Ajax Control Toolkit 中的实现方式(或者例如在 Telerik ASP.NET Ajax Controls 中使用相同的方法)。 存在 ClientScriptResource 和 RequiredScript 属性以及 ScriptObjectBuilder 辅助类,它们有助于解决此类排序问题。
关于javascript - ScriptControl WebResource加载顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13364109/