在ASP.NET Webforms中,我可以使用<%@ OutputCache Duration =“3600”VaryByParam =“none”%>缓存网页。我有非常静态的数据,不经常更新,但是当它更新时,网页上的HTML将会改变。这些数据将与管理系统相关联,允许维护人员进行适当的编辑。
我想有办法将OutputCache的持续时间设置得很长。但我还希望能够在数据更新时从缓存中清除此网页(最好是从数据编辑页面)。
在ASP.NET中实现此目标的标准方法是什么?
答案 0 :(得分:1)
For Each de As DictionaryEntry In HttpContext.Current.Cache
HttpContext.Current.Cache.Remove(DirectCast(de.Key, String))
Next
编辑:以下是有关如何从OutputCache中删除页面的更多信息:
答案 1 :(得分:0)
AFAIK,ASP.NET将检测页面是否已更改,如果是,则将新生成的输出发送到线路(然后将其作为进程的一部分进行缓存);然后,当下次请求页面时,它将从缓存中提取 - 除非页面再次更改。
来自MSDN:
当a请求缓存页面时 用户,ASP.NET确定是否 缓存输出仍然有效 您为其定义的缓存策略 这页纸。如果输出有效,则 缓存的输出发送到客户端 并且页面未被重新处理。 ASP.NET允许您在运行期间运行代码 这个验证检查,以便你可以 编写自定义逻辑来检查是否 页面有效。
你可能想要研究的是,对于更细粒度的控制(如果你需要它),正在实现一个处理程序,它为你提供缓存中的页面 - 这样做可以让你实现逻辑来确定是否页面是否已更改,并确定是否提供缓存;您可以参考另一个答案来确定如何操作缓存 - 但是,我根本看不到这一点。
答案 2 :(得分:0)
我认为标记的解决方案不适用于II7 +。所以这是我用于非常类似问题的另一种方法。
如果您的数据库是SQL Server,您可以使用SQLDependency,但如果不是,则解决方法是使用filedependency,如下所示。
outputcache机制支持一个可以很好地工作的文件依赖项。每次修改依赖项文件时,页面都会自动清除。
因此,每次成功更新数据库时,都可以让dataentrypage写入日志/文本文件。使日志文件成为相关网页的依赖项。
因此。在您的网页.aspx.cs
中protected void Page_Load(object sender,EventArgs e) { string fileDependencyPath = Server.MapPath("〜/ dblog / dataupdate.txt"); Response.AddFileDependency(fileDependencyPath); //其余代码 }
在您的dataentrypage.aspx.cs
中 string path = "~/dblog/dataupdatelog.txt";
if (!File.Exists(System.Web.HttpContext.Current.Server.MapPath(path)))
{
File.Create(System.Web.HttpContext.Current.Server.MapPath(path)).Close();
}
using (StreamWriter w = File.AppendText(System.Web.HttpContext.Current.Server.MapPath(path)))
{
w.WriteLine("\r\nLog Entry : ");
w.WriteLine("{0}", DateTime.Now.ToString());
string strlog = "Some additional info";
w.WriteLine( strlog);
w.WriteLine("__________________________");
w.Flush();
w.Close();
}