asp.net mvc 4:将参数添加到Scripts.Render路径

Sam*_*Sam 4 bundle asp.net-mvc-4

我要执行以下操作:

    @Scripts.Render("~/bundles/jquery?version=1"])
Run Code Online (Sandbox Code Playgroud)

版本值必须是动态的,并且应该与Cookie中定义的值匹配。

如何将此参数添加到Scripts.Render?

我已经用jQuery尝试过类似的方法,但是没有运气:

 @Scripts.Render("~/bundles/jquery?version=" +  $.cookie('version'))
Run Code Online (Sandbox Code Playgroud)

bgx*_*bgx 6

默认情况下,MVC 优化会自动将版本参数添加到发布版本的捆绑链接中,但不会用于调试。例如,当您部署站点时,到/bundles/modernizr 的链接将变为/bundles/modernizr?v=inCVuEFe6J4Q07A0AcRsbJic之类的内容,并且 JavaScript 会被缩小。

如果捆绑包中的其中一个文件已更改,则下次部署时参数会发生更改,因此链接的文件将被浏览器缓存,但当它们在新版本中发生更改时,会从服务器重新加载。

为了更轻松地调试,在调试中禁用优化(= 未添加版本参数且未缩小代码)。如果你想覆盖它,你可以在 web.config 中将编译调试属性设置为 false,或者你可以在代码中启用优化,如下所示:

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
             "~/Scripts/jquery-{version}.js"));

    // Code removed for clarity.
   BundleTable.EnableOptimizations = true;
}
Run Code Online (Sandbox Code Playgroud)

有关完整详细信息,请参阅 http://www.asp.net/mvc/overview/performance/bundling-and-minification,特别是“控制捆绑和缩小”和“捆绑缓存”部分。


kva*_*kel 5

更换

@Scripts.Render("~/bundles/jquery?version=1"])
Run Code Online (Sandbox Code Playgroud)

@{string version = 1}

@Scripts.RenderFormat("<script type=\"text/javascript\" src=\"{0}?nocache="+ version +"\"></script>", "~/bundles/jquery")
Run Code Online (Sandbox Code Playgroud)

如这篇文章所示:http : //www.jomendez.com/2016/05/26/how-to-avoid-js-files-cache-script-bundle-with-razor/


And*_*bal 0

据我所知 @Scripts.Render("~/bundles/jquery") 不是路径。这只是名字。因此,如果您想使用不同的版本,您应该在 BundleConfig 中创建两个捆绑包:

public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.Add(new ScriptBundle("~/bundles/jquery-ver191").Include(
                        "~/Scripts/jquery-1.9.1js"));

              bundles.Add(new ScriptBundle("~/bundles/jquery-ver202").Include(
                        "~/Scripts/jquery-2.0.2js"));
}
Run Code Online (Sandbox Code Playgroud)

您可以在您看来调用必要的版本:

@Scripts.Render("~/bundles/jquery-ver191")
Run Code Online (Sandbox Code Playgroud)

或者

@Scripts.Render("~/bundles/jquery-ver202")
Run Code Online (Sandbox Code Playgroud)

编辑:根据您的评论:但是 BundleConfig 中的默认代码与您想要的相同。

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                        "~/Scripts/jquery-{version}.js"));
Run Code Online (Sandbox Code Playgroud)

或者您没有机会删除除最新版本之外的其他版本?