【问题标题】:Script Manager in ASP.NET 4.5 Web Forms - what does it do? How do you use Bundling & Minification with it?ASP.NET 4.5 Web 窗体中的脚本管理器 - 它有什么作用?你如何使用捆绑和缩小?
【发布时间】:2014-01-16 07:23:31
【问题描述】:

我创建了一个新的 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 脚本。它似乎也与捆绑和缩小冲突 - 因为它包含脚本而不是捆绑引用。

我在 Google 上搜索过,但无法找到实际上与 AJAX 无关的脚本管理器。

更新

我找到了对脚本管理器的 scripts 属性的引用,尽管它没有解释在其中列出所有页面脚本的好处/原因: http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.scripts(v=vs.110).aspx

【问题讨论】:

  • ASP.NET WebForms 早于现代捆绑和 AJAX。 ScriptManager 最初用于确保在页面中呈现较旧的 WebForms 部件(例如 Calendar 控件和 WebParts)所需的脚本。请注意,一般来说,WebForms 与现代 Web 开发不兼容,因为它使用 ASP.NET MVC,它可以让您更好地控制生成的标记。
  • 我以前使用过 MVC——尽管我只需要快速完成一些东西,而不需要 MVC 的所有复杂性。 Web 表单在这方面似乎比 MVC 好得多。
  • 脚本管理器已在 asp.net 4.5 中更新 - 捆绑和缩小已添加到 Web 表单中。这些是最新的功能 - 不应该一起工作吗?

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


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢 - 不确定这是否真的回答了我的问题?
【解决方案2】:

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

【讨论】:

  • 谢谢。捆绑+缩小仅在不处于调试模式时自动缩小。好像没什么用?
  • 但是你能做 CDN 的东西只用捆绑和缩小,比如 CdnPath、CdnDebugPath 和 CdnSupportsSecureConnection?无论如何,我并不是说它很有用,只是它确实具有一些开发人员可能想要使用的功能。我认为真正的答案是他们不喜欢扔掉任何东西,所以他们会尝试改进它,即使可能有更新、更简单/更清洁的方法来做到这一点。这是一篇关于 ASP.NET 4.5 中 ScriptManager 改进的博客文章:go.microsoft.com/fwlink/?LinkID=301884
  • 谢谢 - 所以它不值得使用它,除非有特定的东西需要它 - 比如 AJAX - 我猜?!
  • 是的,或者除非您想更好地控制脚本何时被添加或删除,以及它们的来源。
猜你喜欢
  • 1970-01-01
  • 2018-04-18
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多