[转]ASP.NET 缓存(十二)--根据参数缓存用户控件的多个版本

本文介绍通过指定用户控件名称或控件ID属性来改变缓存用户控件输出的方法。详细阐述了如何使用@OutputCache指令的VaryByParam和VaryByControl属性以及PartialCachingAttribute属性实现用户控件的输出缓存。

可以用以下两种方法改变到缓存的用户控件输出:指定用户控件名称以及查询字符串或窗体 POST 参数,或指定用户控件中所包含的 ASP.NET 服务器控件的 ID 属性。对于前者,使用@ OutputCache 指令的 VaryByParam 属性或将 VaryByParams 属性包括在位于用户控件代码隐藏文件的 PartialCachingAttribute 中。对于后者,使用 VaryByControl 属性或将 VaryByControls 属性包括在 PartialCachingAttribute 中。

注意   仅当用户控件回发并自行处理回发时,根据查询字符串或窗体 POST 参数改变到缓存的用户控件输出才有效。您不能回发到包含页并预期这种类型的用户控件输出缓存正常运行。

通过使用 VaryByControl 属性以声明方式缓存用户控件的多个版本

  1. 创建回发的用户控件。
  2. 将带有 DurationVaryByControl 属性的 @ OutputCache 指令包括在 .ascx 文件中。
    注意   如果在指令中使用了 VaryByControl 属性,则不需要包括 VaryByParam 属性。
  3. VaryByControl 属性设置为用户控件中所包含的控件的 ID 属性值。

    例如,以下 @ OutputCache 指令将用户控件的到期时间设置为 60 秒,并通过 ID 属性值为 State 的 ASP.NET 服务器控件改变该控件的输出。

通过使用 VaryByControls 属性以编程方式缓存用户控件的多个版本

  1. 在代码隐藏类中,创建向自身回发的用户控件代码。
  2. 在用户控件代码的开始处包括元数据 PartialCaching 属性。
  3. 在希望用户控件输出改变所依据的用户控件中,包括 duration 参数的一个值,并将 varyByControls 参数设置为 ASP.NET 服务器控件的 ID 属性值。

    当包括在扩展 UserControl 类的代码之前时,下面的示例将 duration 设置为 60 秒并将 varybycontrols 设置为“State”。

通过使用 VaryByParam 属性以声明方式缓存用户控件的多个版本

  1. 创建向自身回发的用户控件。
  2. 将带有 DurationVaryByParam 属性的 @ OutputCache 指令包括在 .ascx 文件中。
    注意   如果将 VaryByControl 属性包括在用户控件的 @ OutputCache 指令中,则不需要包括 VaryByParam 属性。不管包括哪个属性,如果不想使用它提供的功能,则将其值设置为 None
  3. VaryByParam 属性设置为要根据其改变用户控件的 GET 查询字符串或格式 POST 参数。

    例如,以下 @ OutputCache 指令将用户控件的到期时间设置为 60 秒,并根据窗体 POST 或查询字符串参数 State 来改变控件的输出。

通过使用 VaryByParams 属性以编程方式缓存用户控件的多个版本

  1. 在代码隐藏类中,创建向自身回发的用户控件代码。
  2. 在用户控件代码的开始处包括元数据 PartialCaching 属性。
  3. 包括 duration 参数的值,并将 varyByParams 参数设置为改变用户控件输出所依据的 GET 查询字符串或窗体 POST 参数。

    当包含在扩展 UserControl 类的代码之前时,以下示例将 duration 设置为 60 秒并将 varyByParams 设置为 State 窗体 POST 或查询字符串参数。

下面的示例通过将 ServerClick 事件的代码包括在控件的代码声明块中,演示回发到自身的用户控件。它还演示如何根据与用户控件中包含的两个 DropDownList Web 服务器控件关联的 StateCountry 窗体 ID 属性值,使用 VaryByControl 参数将用户控件输出改变到输出缓存。另外,还包含 Shared 属性,该属性设置为 true 以允许多个页访问同一缓存用户控件输出。它还包括一个包含用户控件的简单的 .aspx 文件。若要使用以下示例,请将用户控件文件命名为 Sample.ascx


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值