我想做以下事情:
@Scripts.Render("~/bundles/jquery?version=1"])
版本值必须是动态的,并且应该与 cookie 中定义的值相匹配。
如何将此参数添加到 Scripts.Render ?
我用 jQuery 尝试过类似的方法,但没有运气:
@Scripts.Render("~/bundles/jquery?version=" + $.cookie('version'))
我想做以下事情:
@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 优化会自动将版本参数添加到发布版本的捆绑链接中,但不会用于调试。例如,当您部署您的站点时,到 /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,特别是“控制捆绑和缩小”和“捆绑缓存”部分。
据我所知,@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);
}