【问题标题】:How to cache separate instances of user control depending upon a property value如何根据属性值缓存用户控件的单独实例
【发布时间】:2010-12-05 13:04:11
【问题描述】:

我有一个名为 UC_Test 的 asp.net 用户控件,它公开了一个名为 param1 的公共属性。它托管在 aspx 页面 A 和 B 中。

在 A 页上,param1 设置为 10,在 B 页上,param1 设置为 20。 根据参数值,控制用户控件的格式。

我希望页面 A 和页面 B 缓存分离的用户控件实例。

正如 okw 所指出的,我想使用缓存是出于性能原因,而不是为了持久化值。请告诉我如何实现这一点。

我可以为此目的使用 Shared=false 吗?例如?

感谢阅读。

【问题讨论】:

  • 您“缓存”的目的是为了性能还是为了存储价值?

标签: asp.net caching user-controls


【解决方案1】:

这听起来像是 VaryByCustom 输出缓存指令的理想候选者。您可以只使用属性的值来确定缓存版本之间的差异。

详情请参阅 MSDN:http://msdn.microsoft.com/en-us/library/ms550239.aspx

【讨论】:

    【解决方案2】:

    最直接的方法是使用一个包含适当值的 HiddenField。在表单提交或回发调用期间从页面中读取它。

    【讨论】:

      【解决方案3】:

      你可以这样做:

      public int MyProperty
      {
          get
          {
              return (int)ViewState[this.UniqueID + "_MyProperty"];
          }
      
          set
          {
              ViewState[this.UniqueID + "_MyProperty"] = value;
          }
      }
      

      在这种情况下,ViewState 可以与 HttpContext.Current.Cache 或 HttpContext.Current.Session 互换。您只需要确保检查空值或其他内容。

      希望对你有帮助。

      【讨论】:

        猜你喜欢
        • 2018-01-16
        • 2015-03-17
        • 2013-04-15
        • 2013-10-04
        • 1970-01-01
        • 2017-11-17
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        相关资源
        最近更新 更多