我希望为生产环境的CSS文件添加版本号,以便在prod服务器中部署新版本后,每次按Ctrl + F5下载新的CSS文件,因为旧版本在浏览器中缓存。
我正在添加构建号作为querystring param。
link href="Styles/jquery.Autocomplete.css?<%= Globals.BuildNumber %>" rel="stylesheet" type="text/css"
但输出是
link href="../../Styles/jquery.Autocomplete.css?<%= Globals.BuildNumber %>"
看起来scriptlet在head标签中不起作用,因为这在body标签中很好。
答案 0 :(得分:1)
从runat="server"
代码中移除href
属性(它会转义<head>
字符串)。
<head >
<title></title>
<link rel="Stylesheet" href="Styles/jquery.Autocomplete.css?<%= Globals.BuildNumber %>" .. />
</head>
但这不是单一(可能不是很好)的解决方案。 (更多信息read article)。如果您可以编写此代码,则无需删除runat="server"
属性:
或者使用HtmlLink
(System.Web.UI.HtmlControls命名空间)
myHtmlLink.Href = "Styles/jquery.Autocomplete.css?" + Globals.BuildNumber;
myHtmlLink.Attributes.Add("rel", "stylesheet");
myHtmlLink.Attributes.Add("type", "text/css");
Header.Controls.Add(myHtmlLink);
答案 1 :(得分:1)
在任何地方都没有记录,但正如您发现的那样HtmlHead似乎不支持embedded code blocks。这是解决这个问题的一种方法。 (如果不明显,它应该放在你的代码隐藏文件中):
const int BuildNumber = 1;
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
// add style sheet
Header.Controls.Add(new Literal() {
Text = string.Format(
@"<link rel='stylesheet' type='text/css' href='custom.css?{0}' />",
BuildNumber
)
});
}