编辑:当您刷新页面时,该页面中的某些元素(如 CSS 和 JavaScript 文件、图像等)可能不会从服务器更新,因为它们被浏览器缓存,因此您可能无法查看您的最新更新。您需要做的是以某种方式阻止浏览器使用文件的缓存版本并再次请求这些内容。
一种方法是禁用对 CSS 或任何经常更新的文件的缓存。要在 ASP.NET 中执行此操作,请更改要禁用缓存的目录中的 Web.config 文件(在您的示例中为 App_themes)。如果该目录不包含Web.config 文件,您可以创建一个。要完全禁用缓存,您可以将以下行添加到 Web.config(如果某些 XML 元素已经存在,则将新的子元素添加到它们):
<configuration>
<system.webServer>
<staticContent>
<clientCache cacheControlMode="DisableCache" />
</staticContent>
</system.webServer>
</configuration>
您可以将其设置为较短的时间,例如 5 分钟,而不是完全禁用缓存。为此,请将上面示例中的 clientCache 元素更改为:
<clientCache cacheControlMaxAge="00.00:05:00" cacheControlMode="UseMaxAge"/>
请记住,禁用缓存是一个非常糟糕的主意,并且会非常严重地影响性能,除非绝对必要并且如果所有其他解决方案都失败了,否则您不应这样做。
该问题的(更好的)解决方案是使用版本控制(如您所述),它应该可以工作。您所做的是将链接到 CSS 文件的方式从 <link rel="stylesheet" href="style.css"> 更改为 <link rel="stylesheet" href="style.css?v=1">(版本作为参数附加)。您不需要更改磁盘上实际 CSS 文件的名称。现在,浏览器将缓存style.css?v=1。如果您的 CSS 发生更改并且您希望立即应用此更改,则您手动更改所有指向您的 CSS 的链接并增加版本 (<link rel="stylesheet" href="style.css?v=2">)。没有浏览器在其缓存中包含style.css?v=2,因此所有浏览器都会发送一个新请求来获取该文件。
每次更改所有 CSS 引用时手动更改它们非常麻烦。要自动执行此过程,您可以使用 ASP.NET 中的 bundling and minification 插件(它仅在 ASP.NET 的更高版本中可用)。捆绑和缩小是一种非常有用的优化技术,无论如何您都应该使用它来提高站点的性能,因此启用它是一个好主意。除其他外,捆绑插件会在文件更改后自动更改版本参数。
根据您的项目类型(ASP.NET MVC、Web 窗体等),启用捆绑略有不同。请参阅有关如何使用它的文档for MVC here 和 for Web Forms here。
如果您希望页面样式动态更改,请在初始页面加载中包含所有主题 CSS 文件,但必须编辑每个主题 CSS 规则,以便其选择器仅在父级中定义了特定类名时才起作用。然后,您可以使用 JavaScript 在父节点中添加/更改类名称以使用不同的主题。
例如,您的 CSS 将是
.theme1 body { background: red; font: 'sans-serif'; }
.theme2 body { background: blue; font: 'serif'; }
您的 HTML 将是:
<html class="theme1">
<body>
</body>
</html>
如果你想改变主题,把 HTML 元素上的类名改为'theme2'。