捆绑脚本不会被渲染

时间:2013-03-21 06:03:18

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

我遇到了使用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 FoundScripts/的状态代码为Status Code: 404 Not Found

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

请帮忙谢谢。

4 个答案:

答案 0 :(得分:8)

您不能为您的包提供一个名称,该名称也是现有目录的名称。重命名捆绑包或添加/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目录。

答案 1 :(得分:2)

您是否尝试在Bundle的虚拟路径中使用非现有目录? 像

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

答案 2 :(得分:2)

接受的答案对我不起作用。我在Visual Studio 2010 SP1上使用MVC 4.0。我有一个名为&#34; jquery-ui.min.js&#34;的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获得了这些信息。

答案 3 :(得分:1)

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