我使用标准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”但找不到任何东西。有谁知道它的位置?
答案 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"
});
}
}