使用 ASP.NET 主题时如何强制刷新 CSS?

Dav*_*Dev 5 css asp.net themes

我正在使用 ASP.NET 主题的站点上工作。我遇到的问题是我更新了 CSS 文件,但原始文件由用户的浏览器保存。我想知道是否有办法强制浏览器获取最新的 CSS 文件。

Theme 是由类似的代码设置的:

private void SetPageTheme()
{
    Page.Theme = "ClientA_Theme";
}
Run Code Online (Sandbox Code Playgroud)

我看过类似问题的其他答案,这些答案表明我在 CSS 文件中附加了一个版本号,例如 /CssFile.css?v=1.2.3

有没有办法用 ASP.NET 主题来做到这一点?

das*_*ash 6

我有一个类似的问题;您可以设置 IIS为 CSS 文件添加内容过期标头,以便它们永远不会被缓存,或者您可以使用此 SO question here 中提供的解决方案

您还可以向每个页面添加一个方法来浏览 page.header 中的控件(甚至可能在您的 Master.Page 中!)执行以下操作:

protected override void OnPreRender(System.EventArgs e)    
{        
        foreach (Control link in Page.Header.Controls)        
        {                       
            if (link is HtmlLink)            
            {                  
                HtmlLink cssLink = link as HtmlLink;
                //Check if CSS link 
                if (cssLink.Attributes["type"].Equals("text/css", StringComparison.CurrentCultureIgnoreCase))                
                {                    
                    if (cssLink.Attributes["href"].Equals(String.Format("~/App_Themes/{0}/{0}.css", Page.Theme), StringComparison.CurrentCultureIgnoreCase))                    
                    {      
                        //perhaps add the version of your app here.                                                                
                        cssLink.Attributes["href"] += "?v1.1";                                          
                    }                
                }            
            }        
        }
        base.OnPreRender(e);     
    }
Run Code Online (Sandbox Code Playgroud)

另一种技术是在主题名称中包含版本号 - 例如 MyTheme1_1 或类似名称。然后每个版本都会从“新”网址加载内容,因此应该为每个用户再次请求内容。显然,这是更多的工作,但每个版本应该是一次,并且没有您在下面提到的开销。