vol*_*pav 14

我想我有一个快速而肮脏的解决方案.诀窍是检查页眉中的控件(例如在PreRender阶段中),找到指向文件App_Themes夹下的CSS文件的链接并使它们动态化(通过向查询字符串添加一些随机信息).这很可能会告诉浏览器使文件的缓存版本无效.

代码:

protected void Page_PreRender(object sender, EventArgs e)
{
    HtmlLink link = null;

    foreach (Control c in Header.Controls)
    {
        if (c is HtmlLink)
        {
            link = c as HtmlLink;

            if (link.Href.IndexOf("App_Themes/", StringComparison.InvariantCultureIgnoreCase) >= 0 &&
                link.Href.EndsWith(".css", StringComparison.InvariantCultureIgnoreCase))
            {
                link.Href += string.Format("?t={0}", DateTime.Now.Ticks.ToString());
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

    <link href="App_Themes/MyTheme/MyTheme.css?t=634310637798128189" 
        type="text/css" rel="stylesheet" />
Run Code Online (Sandbox Code Playgroud)

请注意,您需要<head runat="server">在页面的标记中声明一个,以便能够访问该Header属性(否则它将是null).

  • 您可以通过从文件的最后修改日期生成Ticks来实现 - 当然会慢一些,但会正确反映文件缓存的状态. (4认同)