2

Ajax Extender 控件库是否提供依赖关系管理?我正在创建一组控件,这些控件使用行为使用的一些基本脚本,从这里开始创建扩展器控件,看起来我必须在每个控件代码中包含我的基本脚本。扩展程序库是否为每个控件提供相同的脚本[缓存一个],或者为每个控件提供相同的脚本。

例如,我正在开发依赖于 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 的脚本依赖性这些是所有控件所需的基本脚本

4

1 回答 1

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 文件的调试或发布(缩小)版本,具体取决于处于调试或发布模式。

我不确定您对 MasterPage 不需要ScriptManager. 我假设您有某种机制来处理ScriptManager类似调用GetScriptReferences()控件上的方法和处理这些脚本标记的呈现的职责。

于 2011-09-13T20:33:46.953 回答