使用{version}而不是渲染的MVC 4捆绑用于jquery

时间:2013-06-07 15:22:18

标签: jquery asp.net-mvc-4

这让我发疯了。我有一个包

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

我在Scripts文件夹中

  • 的jquery-1.9.1.js
  • 的jquery-1.9.1.min.js
  • jquery-1.9.1.min.map

并在布局页面中包含以下内容:

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryui")
    @Scripts.Render("~/bundles/jqueryval")

当我在调试或发布版本中运行时,它不会拾取jquery。我从调试器进入代码,当为jquery创建包时,它不包含任何内容。有谁知道为什么{version}外卡没有拿起jquery?非常感谢任何帮助。

3 个答案:

答案 0 :(得分:5)

解决这个问题的原因是将@Saypts.Render("〜/ bundles / jquery")语句从_Layout.cshtml的底部移到了顶部。默认情况下,Microsoft将此render语句放在页脚下方。我将它与@ Scripts.Render("〜/ bundles / modernizr")一起移动到了该部分,然后我的index.cshtml中的脚本开始工作。

显然,问题是当我的index.cshtml中的脚本试图执行时,JQuery尚未加载,因为它位于页面的底部。

答案 1 :(得分:0)

在Global.asax中你加载你的捆绑包吗?

例如:

public class MvcApplication : System.Web.HttpApplication
{
        protected void Application_Start()
        {
            ....

            // Register Bundles
            BundleConfig.RegisterBundles(BundleTable.Bundles);

        }
}

答案 2 :(得分:0)

我有完全相同的问题并找到了修复程序。我注意到,如果我使用jquery文件的版本号而不是{version}令牌,它可以在捆绑/缩小时使用。问题是它没有替换{version}令牌,然后无法将jquery文件拉入捆绑包中。

看起来System.Web.Optimization dll负责转换bundle config中的{version}令牌。我最终使用NuGet来更新这个dll。我也刚刚更新了所有与MVC相关的dll(Razor,MVC,网页等)。之后它起作用了。

您可以通过拆分构建和添加捆绑包到捆绑配置的操作来查看这是否是您的问题。新建一个bundle对象。给它一个突破点。执行Include方法然后在bundle config上执行add方法以添加新bundle。当您进入捆绑包时,您可以在执行Include方法后查看其内部,以查看Item属性是否相应增加。当这是一个问题时,它并没有为我增加。

此外,这是一个非常完善的从MVC 4迁移到MVC 5的参考。我有一些工作要做,以便在更新NuGet包后更新所有的程序集引用。

http://www.asp.net/mvc/tutorials/mvc-5/how-to-upgrade-an-aspnet-mvc-4-and-web-api-project-to-aspnet-mvc-5-and-web-api-2

ASP.NET: This method cannot be called during the application's pre-start initialization stage