我创建了一个aspx页面,并在Firefox和Chrome中查看它,它运行正常,运行C#代码。但是当我对页面进行更改(包括删除所有内容并提供空白页面)时,两个浏览器都会继续显示原始编译的aspx页面!
尽管对aspx文件进行了更改,但ASP.Net(Web服务器)似乎没有重新编译。 让它重新编译的唯一方法是更改web.config然后重新启动Web服务器!
我甚至添加了以下代码,但它仍然加载了原始页面:
<script runat="server">
Sub Page_Load
Random rd = new Random();
Response.AddHeader("ETag", rd.Next(1111111, 9999999).ToString());
Response.AddHeader("Pragma", "no-cache");
Response.CacheControl = "no-cache";
Response.Cache.SetNoStore();
Response.Expires = -1;
End Sub
</script>
测试我是否会破坏浏览器缓存:
使用Apache和Mono,而不是IIS
答案 0 :(得分:2)
这似乎是Linux上的Mono + Apache问题。它没有看到已编译的页面的更改。唯一的解决方法是:
重启Apache网络服务器(这会导致它看到已更改) - 只需大约2秒
删除“/ tmp / www-data-temp-aspnet-0 /”中的临时文件(这可能有点儿错误,所以#1是更好的选择)
答案 1 :(得分:0)
检查您的Web应用程序是Web Application
项目还是Web Site
项目。如果它是Web应用程序,则每次更改内容时都需要编译,而网站项目允许在不编译的情况下反映更改。此外,您可以在浏览器中使用Ctrl+F5
来获取非缓存的页面副本。希望他的帮助。
阅读详情here
答案 2 :(得分:0)
简答:这是浏览器的错误,它是预期的行为设计。在浏览器中强制缓存刷新(在IE中为Ctrl-F5)。
更正:当它是Mono / Apache堆栈时,不是IIS。然后手动重启可能是唯一的解决方法。在IIS中,当服务器终止空闲进程时,在不活动期间自然会清除过时效果。在Mono中,可能会有或可能没有相同的清洁计划,因此,流程生命周期和配置是第一个需要修复的地方。
不重新编译的行为是由请求页面的复杂标识引起的。身份包括URL,时间戳和会话。如果您尝试在不关闭浏览器的情况下刷新页面,那么ASP服务器将需要提供旧版编译页面的旧版本,因为服务器会尝试维护服务页面与现有会话,视图状态甚至客户端脚本的一致性。此外,浏览器设计为符合缓慢更改的互联网页面,将副本存储在缓存中并保持副本的年龄以跳过不必要的网络旅行。否则互联网会慢10倍。
其他说明:推送ASP服务器的最慢文件是css文件。