ToolkitScriptManager:一些脚本文件是如何定位的?

时间:2013-07-25 03:30:56

标签: asp.net webforms

我使用标准Internet模板的ASP.NET 4.5 Webform项目。 Site.Master中包含:

<ajaxToolkit:ToolkitScriptManager runat="server">
    <Scripts>
        <%--Framework Scripts--%>
        <asp:ScriptReference Name="jquery" />   <!-- ??? -->
        <asp:ScriptReference Name="jquery.ui.combined" />  <!-- ?? -->
        <asp:ScriptReference Name="WebForms.js" Path="~/Scripts/WebForms/WebForms.js" />
        ...

上面的两个jquery行显然导致在html文档中生成以下内容:

<script src="Scripts/jquery-1.7.1.js" type="text/javascript"></script>
<script src="Scripts/jquery-ui-1.8.20.js" type="text/javascript"></script>

我是否知道ASP.NET如何知道这两个文件的链接?

-

7月30日更新:

我发现this描述了如何在4.5 Web窗体应用程序中注册jQuery脚本。代码示例准确显示了所选版本的jQuery脚本是如何链接的。它表示它是在Application_Start之前运行的PreApplicationStart方法中执行的。我在整个项目中搜索了“PreApplicationStart”但找不到任何东西。有谁知道它的位置?

1 个答案:

答案 0 :(得分:1)

来自.Net framework 4.0 ScriptManager支持脚本映射功能。 因此,您可以使用脚本路径注册(关联)任何名称(甚至是您自己的脚本)。主要的好处是您可以指定用于调试,发布配置的脚本。您还可以指定脚本的CDN位置。 ScriptManager将在运行时为当前配置选择正确的一个。

基本上,脚本映射在应用程序启动中注册,如以下示例所示:

void Application_Start(object sender, EventArgs e) {
    // map a simple name to a path
    ScriptManager.ScriptResourceMapping.AddDefinition("jQuery", new ScriptResourceDefinition {
        Path = "~/scripts/jquery-1.7.1.min.js",
        DebugPath = "~/scripts/jquery-1.7.1.js",
        CdnPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.7.1.min.js",
        CdnDebugPath = "http://ajax.microsoft.com/ajax/jQuery/jquery-1.7.1.js"
    });
}

修改 在ASP.NET 4中,添加了PreApplicationStart方法的概念,程序集可以使用该方法在appdomain中尽早执行代码而无需任何配置。 因此,注册映射由AspNet.ScriptManager.jQuery和AspNet.ScriptManager.jQueryUI库添加,默认情况下通过nuget添加到模板中。

基本上,这个库由一个类组成,如下例所示:

[EditorBrowsable(EditorBrowsableState.Never)]
public static class PreApplicationStartCode
{
  public static void Start()
  {
     string str = "2.0.3";
     ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition()
     {
       Path = "~/Scripts/jquery-" + str + ".min.js",
       DebugPath = "~/Scripts/jquery-" + str + ".js",
       CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + str + ".min.js",
       CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + str + ".js",
       CdnSupportsSecureConnection = true,
       LoadSuccessExpression = "window.jQuery"
     });
  }
}