我想做以下事情:
@Scripts.Render("~/bundles/jquery?version=1"])
版本值必须是动态的,并且应该与cookie中定义的值匹配。
如何将此参数添加到Scripts.Render?
我用jQuery尝试了类似的东西,但没有运气:
@Scripts.Render("~/bundles/jquery?version=" + $.cookie('version'))
答案 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);
}