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



我想做以下事情:

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

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

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

我在jQuery上尝试过类似的东西,但没有成功:

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

更换

@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/

默认情况下,MVC优化将自动向捆绑包链接添加一个版本参数,用于发布构建,但不用于调试。例如,当您部署您的站点时,指向/bundless/modernizr的链接会变成类似于bundless/modern zr?v=inCVuEFe6J4Q07A0AcRsbJic并且JavaScript被缩小。

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

为了更容易调试,在调试中禁用优化(=未添加版本参数,也未缩小代码)。如果你想覆盖它,你可以在web.config中将compilation debug属性设置为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,特别是"控制捆绑和最小化"one_answers"捆绑缓存"部分。

据我所知,@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"));

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

创建一个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);
}

最新更新