ASP.NET 4.5 Web窗体中的脚本管理器 - 它有什么作用?你如何使用Bundling&用它缩小?

时间:2013-12-29 04:12:41

标签: asp.net webforms asp.net-4.5

我创建了一个新的ASP.NET 4.5.1 Web表单项目。

母版页中有一个脚本管理器 - 它列出了大量脚本,包括对jquery和bootstrap的引用:

<asp:ScriptManager runat="server">
    <Scripts>
        <%--To learn more about bundling scripts in ScriptManager see http://go.microsoft.com/fwlink/?LinkID=301884 --%>
        <%--Framework Scripts--%>
        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        <asp:ScriptReference Name="bootstrap" />
        <asp:ScriptReference Name="respond" />
        <asp:ScriptReference Name="WebForms.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebForms.js" />
        <asp:ScriptReference Name="WebUIValidation.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebUIValidation.js" />
        <asp:ScriptReference Name="MenuStandards.js" Assembly="System.Web" Path="~/Scripts/WebForms/MenuStandards.js" />
        <asp:ScriptReference Name="GridView.js" Assembly="System.Web" Path="~/Scripts/WebForms/GridView.js" />
        <asp:ScriptReference Name="DetailsView.js" Assembly="System.Web" Path="~/Scripts/WebForms/DetailsView.js" />
        <asp:ScriptReference Name="TreeView.js" Assembly="System.Web" Path="~/Scripts/WebForms/TreeView.js" />
        <asp:ScriptReference Name="WebParts.js" Assembly="System.Web" Path="~/Scripts/WebForms/WebParts.js" />
        <asp:ScriptReference Name="Focus.js" Assembly="System.Web" Path="~/Scripts/WebForms/Focus.js" />
        <asp:ScriptReference Name="WebFormsBundle" />
        <%--Site Scripts--%>
    </Scripts>
</asp:ScriptManager>

然后这些脚本会包含在页面中。

我一直以为脚本管理器只是针对AJAX相关的脚本,但它现在包括看似所有的js脚本。它似乎也与Bundling&amp; amp;缩小 - 因为它包括脚本而不是捆绑引用。

我搜索了Google,但无法找到哪个脚本管理器实际上超出了与AJAX的关系。

更新

我发现这个脚本管理器的scripts属性的引用,虽然它没有解释列出所有页面脚本的好处/原因: http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.scripts(v=vs.110).aspx

2 个答案:

答案 0 :(得分:3)

这两个功能确实可以协同工作,因为捆绑脚本和管理脚本是两个独立的任务。捆绑显然是两者中较简单的,因为它只是指将多个脚本文件合并为一个的技术,以便通过减少对服务器的必要请求数来提高性能。但是有充分合理的理由让ScriptManager处理捆绑的JavaScript文件(以及组成它们的脚本)以及非捆绑的JavaScript文件。例如,您可以使用ScriptManager在处于调试模式时加载非缩小脚本和在释放模式下切换缩小脚本。您还可以指定LoadSuccessExpression,它将用于检查脚本是否已正确加载,如果不是,则可以基于CdnPath属性从CDN加载。这些将在ScriptResourceDefinition中指定,可能在App_Code / BundleConfig.cs或Global.asax中指定,但您仍希望将ScriptReference元素添加到ScriptManager。

答案 1 :(得分:0)

优化1.1.0.0不会删除在ScriptManager中注册的重复脚本。

Microsoft.AspNet.Web.Optimization组件版本1.1.0.0(稳定版)中存在一个错误(版本1.0.0.0没有此错误。区别在于BundleResolver对象的方法GetBundleContents的行为。如果我在版本1.0.0.0和1.1.0.0中调用此方法我得到不同的结果。版本1.1.0.0返回不带~字符的脚本的错误路径,因此该路径与ScriptReference Path中指定的路径不匹配。

http://aspnetoptimization.codeplex.com/workitem/94