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.
精彩评论