ScriptControl WebResource加载顺序

时间:2012-11-13 15:59:01

标签: javascript asp.net webforms asp.net-controls

我正在为具有一些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;
}

1 个答案:

答案 0 :(得分:2)

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

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