1

我有一个使用标准 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日更新:

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

4

1 回答 1

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"
     });
  }
}
于 2013-07-25T05:53:05.980 回答