


可以用以下两种方法改变到缓存的用户控件输出:指定用户控件名称以及查询字符串或窗体 POST 参数,或指定用户控件中所包含的 ASP.NET 服务器控件的 ID 属性。对于前者,使用@ OutputCache 指令的 VaryByParam 属性或将 VaryByParams 属性包括在位于用户控件代码隐藏文件的 PartialCachingAttribute 中。对于后者,使用 VaryByControl 属性或将 VaryByControls 属性包括在 PartialCachingAttribute 中。
注意 仅当用户控件回发并自行处理回发时,根据查询字符串或窗体 POST 参数改变到缓存的用户控件输出才有效。您不能回发到包含页并预期这种类型的用户控件输出缓存正常运行。
通过使用 VaryByControl 属性以声明方式缓存用户控件的多个版本
- 创建回发的用户控件。
- 将带有 Duration 和 VaryByControl 属性的 @ OutputCache 指令包括在 .ascx 文件中。
注意 如果在指令中使用了 VaryByControl 属性,则不需要包括 VaryByParam 属性。
- 将 VaryByControl 属性设置为用户控件中所包含的控件的 ID 属性值。
例如,以下 @ OutputCache 指令将用户控件的到期时间设置为 60 秒,并通过 ID 属性值为
State
的 ASP.NET 服务器控件改变该控件的输出。
通过使用 VaryByControls 属性以编程方式缓存用户控件的多个版本
- 在代码隐藏类中,创建向自身回发的用户控件代码。
- 在用户控件代码的开始处包括元数据 PartialCaching 属性。
- 在希望用户控件输出改变所依据的用户控件中,包括 duration 参数的一个值,并将 varyByControls 参数设置为 ASP.NET 服务器控件的 ID 属性值。
当包括在扩展 UserControl 类的代码之前时,下面的示例将 duration 设置为 60 秒并将 varybycontrols 设置为“State”。
通过使用 VaryByParam 属性以声明方式缓存用户控件的多个版本
- 创建向自身回发的用户控件。
- 将带有 Duration 和 VaryByParam 属性的 @ OutputCache 指令包括在 .ascx 文件中。
注意 如果将 VaryByControl 属性包括在用户控件的 @ OutputCache 指令中,则不需要包括 VaryByParam 属性。不管包括哪个属性,如果不想使用它提供的功能,则将其值设置为 None。
- 将 VaryByParam 属性设置为要根据其改变用户控件的 GET 查询字符串或格式 POST 参数。
例如,以下 @ OutputCache 指令将用户控件的到期时间设置为 60 秒,并根据窗体 POST 或查询字符串参数
State
来改变控件的输出。
通过使用 VaryByParams 属性以编程方式缓存用户控件的多个版本
- 在代码隐藏类中,创建向自身回发的用户控件代码。
- 在用户控件代码的开始处包括元数据 PartialCaching 属性。
- 包括 duration 参数的值,并将 varyByParams 参数设置为改变用户控件输出所依据的 GET 查询字符串或窗体 POST 参数。
当包含在扩展 UserControl 类的代码之前时,以下示例将 duration 设置为 60 秒并将 varyByParams 设置为
State
窗体 POST 或查询字符串参数。
下面的示例通过将 ServerClick 事件的代码包括在控件的代码声明块中,演示回发到自身的用户控件。它还演示如何根据与用户控件中包含的两个 DropDownList Web 服务器控件关联的 State
和 Country
窗体 ID 属性值,使用 VaryByControl 参数将用户控件输出改变到输出缓存。另外,还包含 Shared 属性,该属性设置为 true 以允许多个页访问同一缓存用户控件输出。它还包括一个包含用户控件的简单的 .aspx 文件。若要使用以下示例,请将用户控件文件命名为 Sample.ascx
。