1

これが私のコントロールのコードビハインドです:

<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

コントロールのマークアップは次のとおりです。

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="WebUserControl.ascx.vb" Inherits="UsrCtl_WebUserControl" %>
<span>Control Generated <%=DateTime.Now%></span>

現在の時刻を出力するだけです。

ページに埋め込まれたユーザー コントロールを次に示します。

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

そして別のページで:

<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.

4

1 に答える 1

1

少し時間がかかりましたが、問題を再現しました。2 つのコントロールが複数のページPartialCaching同じ ID を持ち、属性のコンストラクターで に設定Sharedすると、問題が発生しますTrueここのドキュメントによると、コンストラクターの Shared プロパティは「ユーザー コントロールの出力を複数のページで共有できることを示すために true」です。すでにあるものだけを読んでください。内部では、コントロールが存在するページに関係なく、コントロールの ID のみに基づいてコントロールがキャッシュされるようです。

したがって、考えられる解決策は 2 つあります。

  • ページ上のコントロールの ID を変更する
  • PartialCaching コンストラクターで、Shared を false に設定します。
于 2010-05-11T14:27:33.823 に答える