Ajax Extender控件库是否提供依赖关系管理?我正在创建一组控件,它们使用行为使用的一些基本脚本,并从这里Creating a Extender Control看起来我必须在每个控制代码中包含我的基本脚本。因此,扩展程序库为每个控件提供相同的脚本[缓存的脚本],或者为每个控件提供相同的脚本。
例如我正在开发依赖于jQuery的控件。由于我正在开发扩展程序控件,我将不得不从如下界面实现此方法,请注意jquery脚本!
protected override IEnumerable<ScriptReference> GetScriptReferences()
{
ScriptReference reference = new ScriptReference();
reference.Path = ResolveClientUrl("jQuery.js");
reference.Path = ResolveClientUrl("FocusBehavior.js");
return new ScriptReference[] { reference };
}
现在我将在另一个控件中使用相同的jquery脚本,这是否意味着如果两个控件都在同一页面中它们会被提供两次? 还有一个问题,
如何使扩展程序控件输出生产脚本而不是调试脚本 使用scriptmanager注册脚本对我来说也不是一个选项,因为我使用的页面不需要脚本管理器。
一些规格:
在VS2005中开发
.NET 2.0,ASP.NET 2.0
脚本依赖于Sizzle,emile.js,spine.js这些是所有控件所需的基本脚本
答案 0 :(得分:0)
我相信ASP.NET框架在其呈现过程中可以正确处理重复的ScriptReference
对象,因为ASP.NET控件可以存在于页面上的多个实例中。
例如,在ASP.NET页面中,您可以执行以下操作:
<act:Calendar runat="server" ID="calendar1"/>
<act:Calendar runat="server" ID="calendar2"/>
这两个控件都依赖于相同的脚本,但框架不会加载它们两次。
在您的情况下,您可能希望执行以下操作:
protected override IEnumerable<ScriptReference> GetScriptReferences()
{
List<ScriptReference> references = new List<ScriptReference>();
#if DEBUG
// Load Debug Version
references.Add(new ScriptReference(ResolveClientUrl("~/Path_To_Your_Debug_JS.js"));
#else
// Load Minified Version
references.Add(new ScriptReference(ResolveClientUrl("~/Path_To_Your_Release_JS.js"));
#endif
return references;
}
这应该允许您提供Javascript文件的Debug或Release(缩小)版本,具体取决于处于Debug或Release模式。
我不确定您对MasterPage的评论不需要ScriptManager
。我假设您有某种处理ScriptManager
职责的机制,比如在控件上调用GetScriptReferences()
方法并处理这些脚本标记的呈现。