Scriptlet不能在head标签中工作

本文关键字:工作 标签 head 不能 Scriptlet | 更新日期: 2023-09-27 18:18:44

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

我正在添加构建号作为这样的查询字符串参数。

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

但是输出是这样的

link href="../../Styles/jquery.Autocomplete.css?&lt;%= Globals.BuildNumber %>"

查看scriptlet在head标签中不工作,因为这在body标签中很好。

Scriptlet不能在head标签中工作

<head>标签中删除runat="server"属性(转义href字符串)

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

,但这不是一个单一的(可能不太好的)解决方案。(欲了解更多信息,请阅读文章)。如果您可以编写以下代码,则无需删除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(
      @"<link rel='stylesheet' type='text/css' href='custom.css?{0}' />",
      BuildNumber
    )
  });
}