Кэширование Web UserControl от Propety не работает (Grr!) - PullRequest
1 голос
/ 11 мая 2010

Вот код моего элемента управления:

<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" />

В соответствии с документацией этот элемент управления должен поддерживать 60-секундную кэшированную версию для каждого значения свойства CacheString.

Он не работает - он кэшируется в течение 60 секунд, но создается только одна кэшированная копия независимо от того, что я поместил в свойство CacheString.

У кого-нибудь есть идеи, что я делаю не так? - После 4 часов у меня не осталось ни волос, ни ногтей - пожалуйста, сохраните мой монитор от кирпича.

1 Ответ

1 голос
/ 11 мая 2010

Хорошо, это заняло у меня немного времени, но я просто повторил вашу проблему. Проблема возникает, когда два элемента управления имеют одинаковый идентификатор на нескольких страницах и в конструкторе для атрибута PartialCaching, для Shared установлено значение True. В соответствии с документацией здесь свойство Shared в конструкторе имеет значение 'true, чтобы указать, что выходные данные пользовательского элемента управления могут совместно использоваться несколькими страницами', что означает, как вы видели, первый загруженный элемент управления устанавливает его и последующие элементы управления могут читать только то, что уже есть. Под прикрытием кажется, что элемент управления кэшируется только на основании идентификатора элемента управления, независимо от того, на какой странице он находится.

Итак, есть два возможных решения:

  • Изменить идентификатор элемента управления на страница
  • В конструкторе PartialCaching, установите Shared в false.
...