可以为页和页上的用户控件设置不同的输出缓存持续时间值。如果页的输出缓存持续时间长于用户控件的输出缓存持续时间,则页的输出缓存持续时间优先。例如,如果页的输出缓存设置为 100 秒,而用户控件的输出缓存设置为 50 秒,则包括用户控件在内的整个页将在输出缓存中存储 100 秒,而与用户控件较短的时间设置无关。
下面的代码示例演示了当页的缓存持续时间长于用户控件的缓存持续时间时的效果。该页配置为缓存 100 秒。
<%@ Page language="C#" %>
<%@ Register tagprefix="SampleControl" tagname="Time" src="uc01.ascx" %>
<%@ OutputCache duration="100" varybyparam="none" %>
<SampleControl:Time runat="server" /><br /> <br /> <br />
This page was most recently generated at:<p>
<% DateTime t = DateTime.Now.ToString();
Response.Write(t); %>
<%@ Page language="VB" %>
<%@ Register tagprefix="SampleControl" tagname="Time" src="uc01.ascx" %>
<%@ OutputCache duration="100" varybyparam="none" %>
<SampleControl:Time runat="server" /><br /> <br /> <br />
This page was most recently generated at:<p>
<% Dim t As DateTime = DateTime.Now.ToString()
Response.Write(t) %>
下面的代码示例演示了包括在页中的用户控件。控件的缓存持续时间设置为 50 秒。
<% @Control language="C#" %>
<% @OutputCache duration="50" varybyparam="none" %>
This user control was most recently generated at:<p>
<% DateTime t = DateTime.Now.ToString();
Response.Write(t); %>
<% @Control language="VB" %>
<% @OutputCache duration="50" varybyparam="none" %>
This user control was most recently generated at:<p>
<% Dim t As DateTime = DateTime.Now.ToString()
Response.Write(t) %>
不过,如果页的输出缓存持续时间比用户控件的输出缓存持续时间短,则即使已为某个请求重新生成该页的其余部分,也将一直缓存用户控件直到其持续时间到期为止。例如,如果页的输出缓存设置为 50 秒,而用户控件的输出缓存设置为 100 秒,则页的其余部分每到期两次,用户控件才到期一次。
下面的代码演示了一个页的标记,该页中包含的用户控件的缓存持续时间长于该页的缓存持续时间。该页配置为缓存 50 秒。
<%@ Page language="C#" %>
<%@ Register tagprefix="SampleControl" tagname="Time" src="uc2.ascx" %>
<%@ OutputCache duration="50" varybyparam="none" %>
<SampleControl:Time runat="server" /><br /> <br /> <br />
This page was most recently generated at:<p>
<% DateTime t = DateTime.Now.ToString();
Response.Write(t); %>
<%@ Page language="VB" %>
<%@ Register tagprefix="SampleControl" tagname="Time" src="Uc2.ascx" %>
<%@ OutputCache duration="50" varybyparam="none" %>
<SampleControl:Time runat="server" /><br /> <br /> <br />
This page was most recently generated at:<p>
<% Dim t As DateTime = DateTime.Now.ToString()
Response.Write(t) %>
下面的代码演示了包括在页中的用户控件。控件的缓存持续时间设置为 100 秒。
<% @Control language="C#" %>
<% @OutputCache duration="100" varybyparam="none" %>
This user control was most recently generated at:<p>
<% DateTime t = DateTime.Now.ToString();
Response.Write(t); %>
<% @Control language="VB" %>
<% @OutputCache duration="100" varybyparam="none" %>
This user control was most recently generated at:<p>
<% Dim t As DateTime = DateTime.Now.ToString()
Response.Write(t) %>