开发者

Caching Web UserControl by Propety is not working (Grr!)

开发者 https://www.devze.com 2022-12-29 18:14 出处:网络
Here\'s my control\'s code behind: <PartialCaching(60, Nothing, \"UsrCtl_WebUserControl.CacheString\", Nothing, True)> _

Here's my control's code behind:

<PartialCaching(60, Nothing, "UsrCtl_WebUserControl.CacheString", Nothing, True)> _
Partial Class UsrCtl_WebUserControl
 Inherits System.Web.UI.UserControl

 Private _CacheString As String

 Public Property CacheString() As String
  Get
   Return _CacheString
  End Get
  Set(ByVal value As String)
   _CacheString = value
  End Set
 End Property
End Class

Here's the Control's Markup:

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="WebUserControl.ascx.vb" Inherits="UsrCtl_WebUserControl" %&g开发者_运维百科t;
<span>Control Generated <%=DateTime.Now%></span>

It just outputs the current time.

Here's the user control embedded in a page:

<uc:wuc ID="wuc" runat="server" CacheString="A" />

And in another page:

<uc:wuc ID="wuc" runat="server" CacheString="B" />

According to the docs this control should maintain a different, 60 second cached version for each value of the CacheString property.

It doesn't work - it caches for 60 seconds, but only one cached copy is created regardless of what I put in the CacheString property.

Anyone any ideas what i'm doing wrong? - After 4 hours of this I have no hair or nails left - please save my monitor from the brick.


OK it's taken me a little while but I just replicated your problem. The problem crops up when the two controls have the same ID across multiple pages and in the constructor for the PartialCaching attribute, you set Shared to True. According to the documentation here the Shared property in the constructor is 'true to indicate that the user control output can be shared with multiple pages', which means, as you've seen, the first control to get loaded sets it and subsequent controls can only read what's already there. Under the covers it seems the control gets cached based on the ID of the control only without any regard to the page the control is on.

So, there are two potential solutions:

  • Change the ID of the control on the page
  • In the PartialCaching constructor, set Shared to false.
0

精彩评论

暂无评论...
验证码 换一张
取 消