动态更新缓存页的部分

更新:2007 年 11 月

对页面进行缓存可以大大提高 Web 应用程序的性能。不过,在有些情况下,需要缓存页面的大部分内容,但页面中的某些片段是动态的。例如,如果创建一个页面,其中的新闻故事在设定时间段内完全是静态的,则可以设置为缓存整个页面。如果希望提供在每次页请求时都发生变化的交替出现的广告横幅,则该页中包含该广告的部分需要是动态的。

若要允许缓存某个页面但动态地替换其中的某些内容,可以使用 ASP.NET 缓存后替换。通过使用缓存后替换,将对整个页面进行输出缓存,并将特定的部分标记为不进行缓存。在广告横幅示例中,AdRotator 控件使您可以利用缓存后替换功能,以便为每个用户及在每次刷新页时动态创建广告。

有三种方法可以实现缓存后替换:

Substitution 控件

ASP.NET Substitution 控件指定缓存页中动态创建而不进行缓存的部分。将 Substitution 控件放置在该页上要显示动态内容的位置。

在运行时,Substitution 控件调用使用 MethodName 属性指定的方法。该方法必须返回一个字符串,然后该字符串替换 Substitution 控件的内容。该方法必须是 PageUserControl 包含控件上的静态方法。

使用 Substitution 控件可以将客户端可缓存性更改为服务器可缓存性,以便该页面不会在客户端上进行缓存。这样可以确保以后对该页的请求能够再次调用该方法以生成动态内容。

Substitution API

若要以编程方式为缓存页创建动态内容,可以在页代码中将某个方法的名称作为参数传递给 WriteSubstitution 方法来调用该方法。该方法处理动态内容的创建,它采用单个 HttpContext 参数并返回一个字符串。该返回字符串是将在给定位置被替换的内容。通过调用 WriteSubstitution 方法来代替以声明方式使用 Substitution 控件的一个好处是可以调用任意对象的方法,而不只是调用 PageUserControl 对象的静态方法。

调用 WriteSubstitution 方法可以将客户端可缓存性更改为服务器可缓存性,以便该页不会在客户端上进行缓存。这样可以确保以后对该页的请求能够再次调用该方法以生成动态内容。

AdRotator 控件

AdRotator 服务器控件在内部实现对缓存后替换的支持。如果将 AdRotator 控件放在页面上,则无论是否缓存父页,都将在每次请求时呈现其特有的广告。因此,包含 AdRotator 控件的页面只在服务器端进行缓存。

请参见

概念

ASP.NET 缓存概述

缓存 ASP.NET 页

缓存页的多个版本

缓存 ASP.NET 页的某些部分

缓存应用程序数据

使用 SqlCacheDependency 类在 ASP.NET 中缓存