Scriptlet不在head标签中工作

时间:2011-12-23 06:50:49

标签: c# asp.net

我希望为生产环境的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?&lt;%= Globals.BuildNumber %>"

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

2 个答案:

答案 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
    )
  });
}