【问题标题】:Ajax contol toolkit: how to load only scripts needed now that ToolkitScriptManager is obsoleteAjax 控制工具包:现在 ToolkitScriptManager 已过时,如何仅加载所需的脚本
【发布时间】:2016-06-03 11:40:26
【问题描述】:

我们正在使用 Ajax Control 工具包。 我们安装了这个:

https://www.nuget.org/packages/AjaxControlToolkit.StaticResources/

我们已经使用 ACT 进行捆绑,通过在 web config 中进行设置:

<asp:ScriptManager ID="sm" runat="server" EnableCdn="true" >
            <Scripts>
                <asp:ScriptReference Path="~/Scripts/AjaxControlToolkit/Bundle" />
            </Scripts>
        </asp:ScriptManager>

我们正在优化页面,我们注意到,该脚本将近 1MB。

这个:

AJAX Control Toolkit Loading All Scripts

还有这个:

http://stephenwalther.com/archive/2013/07/25/july-2013-release-of-the-ajax-control-toolkit

会解决我们的问题。

但是在新版本的 Ajax Control Toolkit ajaxToolkit:ToolkitScriptManager 已经过时,所以我们不能在脚本管理器中使用 ControlBundles。

我的问题是:如何只加载我们需要的脚本(我们正在使用下拉菜单、评分和滑块)?

我们正在使用:

  • Ajax 控制工具包 16.1.0

  • .net 框架 4.5.1

编辑:到目前为止我做了什么: 将 AjaxControlToolkit.config 添加到 root 并插入此

<?xml version="1.0"?>
<ajaxControlToolkit>
  <controlBundles>
    <controlBundle name="AjaxBundle">
      <control name="CalendarExtender" />
      <control name="ComboBox" />
    </controlBundle>
  </controlBundles>
</ajaxControlToolkit>

将脚本管理器添加到母版页:

<asp:ScriptManager ID="sm" runat="server" EnableCdn="true" >
            <Scripts>
                <asp:ScriptReference Path="~/Scripts/AjaxControlToolkit/AjaxBundleBundle" />
            </Scripts>
        </asp:ScriptManager>

将此添加到 Global asax 到应用程序启动:

BundleTable.Bundles.Add(new ScriptBundle("~/Script/js-master".Include("~/Scripts/AjaxControlToolkit/AjaxBundle"));

在母版页上我也有:

<%: System.Web.Optimization.Scripts.Render("~/Script/js-master") %>

我故意错过了滑块扩展器(所以它不应该工作),但它仍然可以工作,所以我猜所有的 Ajax Control Toolkit 脚本都已加载。

网页配置,还有:

<compilation debug="false" targetFramework="4.5.1">

【问题讨论】:

  • 您不需要将ScriptBundle 明确添加到BundleTable 中。你能检查一下浏览器的开发者控制台中实际加载了哪些脚本吗?也可能是您加载 CDN 捆绑包。

标签: asp.net webforms ajaxcontroltoolkit


【解决方案1】:

其实可以的。保留此功能是为了向后兼容。

您不再需要明确指定它。 Toolkit 扫描应用程序根目录中的AjaxControlToolkit.config 文件(特别是HttpRuntime.AppDomainAppPath)并从中制作控制包。

【讨论】:

  • 我还没有根目录中的 AjaxControlToolkit.config。我将添加它并指定我想要的脚本。想详细解释一下 HttpRuntime.AppDomainAppPath 设置吗?我猜,那是在 web config 中配置的。
  • 您需要将此捆绑包指定为脚本,例如默认捆绑包:github.com/DevExpress/AjaxControlToolkit/blob/master/… 请记住在捆绑包名称之前添加Controlgithub.com/DevExpress/AjaxControlToolkit/wiki/…
  • 您可以在ScriptManager 中指定ScriptReference 条目,这是使工具包工作所必需的。在大多数情况下,它位于母版页中。您可以再次检查this link 以查看ScriptReference 实体语法。将 bundle 添加到 BundleTable 只是告诉我们可以使用它,但不会将任何 bundle 渲染到页面。
  • 如果您在 AjaxBundle 之后命名 ControlBundle,那么路径应该类似于 ~/Scripts/AjaxControlToolkit/AjaxBundleBundle。还要检查您是否没有其他捆绑条目,例如 ~/Scripts/AjaxControlToolkit/Bundle,因此脚本可能会加载两次。
【解决方案2】:

除了 js 脚本之外,该工具包还会加载一些 CSS 文件。为了防止它加载这些带有 css 和图像内容的 WebResource.axd,您可以使用 web.config:

<configSections>
    <section name="ajaxControlToolkit" type="AjaxControlToolkit.AjaxControlToolkitConfigSection, AjaxControlToolkit" requirePermission="false"/>
</configSections>

<ajaxControlToolkit renderStyleLinks="false" />

要查看文件的内容,在测试项目中,安装 nuget 包AjaxControlToolkit.StaticResources,其中包含所有图像、css 和 js。

例如,我使用 CalendarExtender,但我不希望额外的 http 请求来获取小左右箭头,因此我自定义了 css 以使用我自己的通用精灵。与 Combobox 向下箭头相同,我实际上使用 Bootstrap 插入符号字符/样式而不是图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多