【问题标题】:Bundling scripts are not getting rendered捆绑脚本未呈现
【发布时间】:2013-03-21 06:03:18
【问题描述】:

我在使用 ASP .NET 进行脚本捆绑和缩小时遇到问题 我已经尝试了所有在互联网上找到的流行解决方案,但仍然遇到同样的问题。

我的BundleConfig.cs 看起来像

namespace MYPROJ{
public class BundleConfig
{
    public static void AddDefaultIgnorePatterns(IgnoreList ignoreList)
    {
        if (ignoreList == null)
            return;
        ignoreList.Ignore("*.intellisense.js");
        ignoreList.Ignore("*-vsdoc.js");
        ignoreList.Ignore("*.debug.js", OptimizationMode.WhenEnabled);
        ignoreList.Ignore("*.min.js", OptimizationMode.WhenDisabled);
        ignoreList.Ignore("*.min.css", OptimizationMode.WhenDisabled);
    }

    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.IgnoreList.Clear();
        AddDefaultIgnorePatterns(bundles.IgnoreList);

        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

…
…

        //bundles.Add(new ScriptBundle("~/Scripts").Include("~/Scripts/jquery.unobtrusive-ajax.min.js", "~/Scripts/kendoui/kendo.all.min.js", "~/Scripts/kendoui/kendo.combobox.min.js", "~/Scripts/kendoui/kendo.grid.min.js"));
        //bundles.Add(new ScriptBundle("~/Scripts").Include("~/Scripts/kendoui/kendo.all.min"));
        //bundles.Add(new ScriptBundle("~/Scripts").Include("~/Scripts/kendoui/kendo.combobox.min"));
        //bundles.Add(new ScriptBundle("~/Scripts").Include("~/Scripts/kendoui/kendo.grid.min.js"));            
        bundles.Add(new ScriptBundle("~/Scripts").IncludeDirectory("~/Scripts", "*.js").IncludeDirectory("~/Scripts/kendoui", "*.js"));

        ……
        BundleTable.EnableOptimizations = true;
    }
}
}

在主视图中:

@Scripts.Render("~/Scripts")

现在,当我运行时,我得到了这个标签:

<script src="/Scripts?v=ZnxC8dcoc3fJ-hfKQHLiTe19PjJFHwPhwHPUncuBtzE1"></script>

在使用 chrome 代码检查器时,我发现上述资源的状态码是 Status Code: 302 Found 而对于 Scripts/,它是 Status Code: 404 Not Found

而且我也无法通过在视图源中单击来访问脚本文件,因此看起来没有加载任何内容,但是所有文件和目录都已正确放置。 仅供参考,我的 styleSheets 捆绑工作正常。

请帮忙谢谢。

【问题讨论】:

    标签: razor asp.net-mvc-4 bundling-and-minification


    【解决方案1】:

    您不能为您的包指定一个同时也是现有目录名称的名称。重命名捆绑包或添加/js 以使其正常工作:

    bundles.Add(new ScriptBundle("~/Scripts/js").IncludeDirectory("~/Scripts", "*.js").IncludeDirectory("~/Scripts/kendoui", "*.js"));
    

    @Scripts.Render("~/Scripts/js")
    

    任何其他不存在的名称也可以使用,例如

     bundles.Add(new ScriptBundle("~/ScriptMonkey").IncludeDirectory("~/Scripts", "*.js").IncludeDirectory("~/Scripts/kendoui", "*.js"));
    

    ...假设您没有/ScriptMonkey 目录。

    【讨论】:

      【解决方案2】:

      您是否尝试过在 Bundle 的虚拟路径中使用不存在的目录? 喜欢

      ...new ScriptBundle("~/bundle/Scripts")...
      

      【讨论】:

        【解决方案3】:

        接受的答案对我不起作用。我在 Visual Studio 2010 SP1 上使用 MVC 4.0。我有一个名为“jquery-ui.min.js”的 js 文件,但没有被加载。我的 Bundle.config 代码是:

        bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(                        
                                    "~/Scripts/jquery-ui.min.js"));
        

        我将文件重命名为 jquery-ui.js 并将我的代码更新为

        bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(                        
                                "~/Scripts/jquery-ui.js"));
        

        我从here 获得了此信息。

        【讨论】:

          【解决方案4】:

          决定是否处理请求的捆绑模块逻辑不会接管对现有文件或目录的请求。因此,当您的捆绑请求与现有目录(或文件)位于相同的虚拟路径时,这就是为什么您的捆绑请求不起作用的原因。

          【讨论】:

            猜你喜欢
            • 2012-12-31
            • 1970-01-01
            • 2018-12-18
            • 2016-09-06
            • 1970-01-01
            • 1970-01-01
            • 2017-11-20
            • 2013-04-23
            • 1970-01-01
            相关资源
            最近更新 更多