Scriptlet不在head标签中工作

我想为生产环境的CSS文件添加版本号,以便在prod服务器中部署新版本后,每次按Ctrl + F5下载新的CSS文件,因为旧版本在浏览器中缓存。

我正在添加构建号作为querystring param。

link href="Styles/jquery.Autocomplete.css?" rel="stylesheet" type="text/css" 

但输出就是这个

 link href="../../Styles/jquery.Autocomplete.css?<%= Globals.BuildNumber %>" 

看起来scriptlet在head标签中不起作用,因为这在body标签中很好。

标记中删除runat="server"属性(它从href字符串中转义)。

     

但这不是一个单一的(可能不是很好的)解决方案。 (更多信息阅读文章 )。 如果您可以编写此代码,则无需删除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); 

它没有记录在任何地方,但正如你发现的那样, HtmlHead似乎不支持嵌入式代码块 。 这是解决这个问题的一种方法。 (如果不明显,它应该放在你的代码隐藏文件中):

 const int BuildNumber = 1; protected override void OnLoad(EventArgs e) { base.OnLoad(e); // add style sheet Header.Controls.Add(new Literal() { Text = string.Format( @"", BuildNumber ) }); }