页面部分缓存[转载]
名称 | 说明 | |
---|---|---|
Cached | 获取或设置一个值,该值指示是否为用户控件启用片段缓存。 | |
Dependency | 获取或设置与缓存的用户控件输出关联的 CacheDependency 类的实例。 | |
Duration | 获取或设置缓存的项将在输出缓存中保留的时间。 | |
SupportsCaching | 获取一个值,该值指示用户控件是否支持缓存。 | |
VaryByControl | 获取或设置要用来改变缓存输出的控件标识符列表。 | |
VaryByParams | 获取或设置要用来改变缓存输出的 GET 或 POST 参数名称列表。 |
示例:下面的代码示例演示如何在运行时动态加载用户控件,以及如何以编程方式操作用户控件。PartialCachingAttribute 属性应用于一个名为 SimpleControl 的用户控件,这意味着该用户控件在运行时由 PartialCachingControl 控件包装。SimpleControl 对象的缓存设置可以通过其关联的 ControlCachePolicy 对象以编程方式进行操作,通过引用包装该对象的 PartialCachingControl 控件可获得该对象。在此示例中,在页初始化期间检查 Duration 属性并在满足某些条件的前提下使用 SetSlidingExpiration 和 SetExpires 方法更改该属性。
<%@ Page Language="C#" %>
<%@ Reference Control="SimpleControl.ascx" %>
<script language="C#" runat="server">
// The following example demonstrates how to load a user control dynamically at run time, and
// work with the ControlCachePolicy object associated with it.
// Loads and displays a UserControl defined in a seperate Logonform.ascx file.
// You need to have "SimpleControl.ascx" file in
// the same directory as the aspx file.
void Page_Init(object sender, System.EventArgs e) {
// Obtain a PartialCachingControl object which wraps the 'LogOnControl' user control.
PartialCachingControl pcc = LoadControl("SimpleControl.ascx") as PartialCachingControl;
// If the control is slated to expire in greater than 60 Seconds
if (pcc.CachePolicy.Duration > TimeSpan.FromSeconds(60) )
{
// Make it expire faster. Set a new expiration time to 30 seconds, and make it
// an absolute expiration if it isnt already.
pcc.CachePolicy.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(30)));
pcc.CachePolicy.SetSlidingExpiration(false);
}
Controls.Add(pcc);
}
</script>
实现缓存后替换
有三种方法可以实现缓存后替换:以声明方式使用 Substitution 控件。以编程方式使用 Substitution 控件 API。以隐式方式使用 AdRotator 控件。
Substitution 控件
ASP.NET Substitution 控件指定缓存页中动态创建而不进行缓存的部分。将 Substitution 控件放置在该页上要显示动态内容的位置。
在运行时,Substitution 控件调用使用 MethodName 属性指定的方法。该方法必须返回一个字符串,然后该字符串替换 Substitution 控件的内容。该方法必须是 Page 或 UserControl 包含控件上的静态方法。
使用 Substitution 控件可以将客户端可缓存性更改为服务器可缓存性,以便该页面不会在客户端上进行缓存。这样可以确保以后对该页的请求能够再次调用该方法以生成动态内容。
Substitution API
若要以编程方式为缓存页创建动态内容,可以在页代码中将某个方法的名称作为参数传递给 WriteSubstitution 方法来调用该方法。该方法处理动态内容的创建,它采用单个 HttpContext 参数并返回一个字符串。该返回字符串是将在给定位置被替换的内容。通过调用 WriteSubstitution 方法来代替以声明方式使用 Substitution 控件的一个好处是可以调用任意对象的方法,而不只是调用 Page 或 UserControl 对象的静态方法。
调用 WriteSubstitution 方法可以将客户端可缓存性更改为服务器可缓存性,以便该页不会在客户端上进行缓存。这样可以确保以后对该页的请求能够再次调用该方法以生成动态内容。
AdRotator 控件
AdRotator 服务器控件在内部实现对缓存后替换的支持。如果将 AdRotator 控件放在页面上,则无论是否缓存父页,都将在每次请求时呈现其特有的广告。因此,包含 AdRotator 控件的页面只在服务器端进行缓存。