6

我有一个引用 #include 文件的 ASP.NET 母版页,如下所示:

<!--#include virtual="/includes/scripts.inc"-->

我已修改文件 /includes/scripts.inc,但更改未显示在页面中。需要做什么才能反映修改?

我需要避免以下情况:

  • 重新启动服务器
  • 重新启动 IIS
  • 修改 web.config(似乎没有任何效果)
  • 几乎所有导致应用程序域重新启动的东西

还有其他选择吗?是否有影响 IIS 缓存 #include 文件多长时间的设置?

4

4 回答 4

4

首先,您可能知道,您不应该在 ASP.NET 中使用#include 指令。正确的解决方案是使用用户控件或服务器控件。但是,如果您想要将一堆 HTML 和 Javascript 注入页面(即没有服务器端代码),那么您可以使用 Response.WriteFile:

<%@ Page Language="vb"%>
<html>
<body>
    <% Response.WriteFile( "scripts.inc" ) %>
</body>
</html>
于 2010-08-01T16:16:24.500 回答
3

与缓存无关,无论是服务器端还是客户端。是编译问题。#include 在更改时不会在 ASP.NET 中作为修改被捕获,因此不会重新构建页面。

这个知识库应该有帮助:http: //support.microsoft.com/kb/306575

于 2010-08-01T17:10:28.327 回答
2

所以只要是真正的静态包含,只需在 C# 代码中加载文件并自己注入即可。然后将其放入具有文件依赖关系的缓存中,并且在您更改文件后对象将变为空,这将为您提供再次读取它的标志。

如果它不是真正的静态包含(静态 == 没有 ASP.NET 控件 - 否则它可能会非常多变 - 就像从数据库中喷涌而出或为非常用户提供不同的 CSS),那么你想要搞乱页面编译,这不会发生除非您去编写自己的模板处理器或其他东西:-)

于 2010-08-04T14:46:56.543 回答
1

如果您正在缓存可能需要更改的文件,则应在文件名中包含版本号。

例如:<!--#include virtual="/includes/scripts-1.0.inc"-->

然后当您需要对其进行更改时,将您的包含更新为:

<!--#include virtual="/includes/scripts-2.0.inc"-->
于 2010-08-04T16:52:58.217 回答