如何:根据参数缓存用户控件的多个版本
更新:2007 年 11 月
您可以通过两种方式来改变用户控件输出的缓存:
指定用户控件名称以及一个查询字符串或窗体 POST 参数。可以通过使用 @ OutputCache 指令的 VaryByParam 属性以声明方式进行该指定。或者,可以通过设置用户控件代码中的 PartialCachingAttribute 的 VaryByParams 属性以编程方式达进行该指定。
指定用户控件中包含的 ASP.NET 服务器控件的 ID 属性。可以使用 VaryByControl 属性以声明方式执行该指定。或者,可以通过设置 PartialCachingAttribute 中的 VaryByControls 属性以编程方式进行该指定。
说明: 仅当用户控件回发并自行处理回发时,根据查询字符串或窗体 POST 参数将用户控件输出改变到缓存才有效。如果用户控件回发到包含页,则该类型的用户控件输出缓存将不能正常工作。
通过使用 VaryByControl 属性以声明方式缓存用户控件的多个版本
创建回发的用户控件。
在用户控件中,包括一个带有 Duration 和 VaryByControl 属性的 @ OutputCache 指令。
说明: 如果在指令中使用 VaryByControl 属性,则不需要同时包括 VaryByParam 属性,虽然您也可以包括后者并将其设置为“None”。
将 VaryByControl 属性设置为希望用户控件输出改变所依据的控件的 ID。
例如,下面的 @ OutputCache 指令将用户控件的过期时间设置为 60 秒,并通过 ID 为 State 的 ASP.NET 服务器控件来改变控件输出:
<%@ OutputCache Duration="60" VaryByControl="State" %>
通过使用 VaryByControls 属性以编程方式缓存用户控件的多个版本
在代码中,创建向自身回发的用户控件代码。
在用户控件代码的开头包括一个 PartialCachingAttribute。
包括 Duration 参数的值,并将 VaryByControls 参数设置为希望用户控件输出改变所依据的用户控件中 ASP.NET 服务器控件的 ID 属性值。
下面的代码示例将 Duration 设置为 60 秒并将 VaryByControls 设置为 State。该代码应包括在扩展 UserControl 类的代码之前。
[PartialCaching(60, null, State, null)]
<PartialCaching(60, null, State, null)>
通过使用 VaryByParam 属性以声明方式缓存用户控件的多个版本
创建向自身回发的用户控件。
在用户控件中,包括一个带有 Duration 和 VaryByParam 属性的 @ OutputCache 指令。
说明: 如果将 VaryByControl 属性包括在用户控件的 @ OutputCache 指令中,则不需要同时包括 VaryByParam 属性。
将 VaryByParam 属性设置为希望用户控件改变所依据的 GET 查询字符串或窗体 POST 参数。
例如,下面的 @ OutputCache 指令将用户控件的过期时间设置为 60 秒,并通过名为 State 的窗体 POST 参数或查询字符串参数的值来改变控件的输出。
<%@ OutputCache Duration="60" VaryByParam="State" %>
通过使用 VaryByParams 属性以编程方式缓存用户控件的多个版本
在代码中,创建向自身回发的用户控件代码。
在用户控件代码的开头包括一个 PartialCachingAttribute。
包括 Duration 参数的值,并将 VaryByParams 参数设置为希望用户控件改变所依据的 GET 查询字符串或窗体 POST 参数。
下面的代码示例将 Duration 设置为 60 秒,并将 VaryByParams 设置为名为 State 的窗体 POST 参数或查询字符串参数。该代码应包括在扩展 UserControl 类的代码之前。
[PartialCaching(60, State, null, null)]
<PartialCaching(60, State, null, null)>