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

时间:2013-08-06 08:40:32

标签: asp.net-mvc-4 bundle

我想做以下事情:

    @Scripts.Render("~/bundles/jquery?version=1"])

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

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

我用jQuery尝试了类似的东西,但没有运气:

 @Scripts.Render("~/bundles/jquery?version=" +  $.cookie('version'))

4 个答案:

答案 0 :(得分:3)

默认情况下,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;
}

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

答案 1 :(得分:2)

替换

@Scripts.Render("~/bundles/jquery?version=1"])

@{string version = 1}

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

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

答案 2 :(得分: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"));
}

您可以在视图中调用必要的版本:

@Scripts.Render("~/bundles/jquery-ver191")

@Scripts.Render("~/bundles/jquery-ver202")

编辑:关于你的评论:但BundleConfig中的这个默认代码与你想要的一样。

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

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

答案 3 :(得分:0)

创建一个mvc帮助程序,用于更改生成的html并添加版本。以下示例适用于生成单个文件或多个文件(调试模式)的情况。

public static HtmlString GetScriptsWithVersion()
{
    const string VERSION = "2.0.1"; //or get the version where you want
    const string SCRIPT_END = "\"></script>";
    string html = Scripts.Render("~/bundles/ui").ToString();
    string versionParam = "?v=" + VERSION 
    html = html.Replace(SCRIPT_END, versionParam + SCRIPT_END);
    return new HtmlString(html);
}