2010-05-11 2 views
1

Вот код моего контроля позади:Кэширование Web UserControl по Propety не работает (! Grr)

<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

OK Это взяло меня немного, но я только что воспроизвел вашу проблему. Проблема возникает, когда два элемента управления имеют одинаковый идентификатор на нескольких страницах и в конструкторе для атрибута PartialCaching, вы установили Shared в True. Согласно документации here свойство Shared в конструкторе «истинно, чтобы указать, что выходной элемент управления пользователя может использоваться несколькими страницами», что означает, как вы видели, первый элемент управления, который будет загружен, устанавливает его, а последующие элементы управления могут только читайте, что уже есть. Под крышками кажется, что элемент управления кэшируется на основе идентификатора элемента управления только без учета страницы, на которой находится элемент управления.

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

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

Привет Фил, Спасибо, но если вы читали мой вопрос, вы увидите, что я использую элементы управления на разных страницах, а не на той же странице. Мне нужно Shared = "True", поскольку это для кэширования нижнего колонтитула страницы - было бы мало смысла кэшировать нижний колонтитул страницы на странице за страницей! Я не вижу, что я делаю неправильно. Спасибо за попытку! – PapillonUK

+0

@PapillonUK Тот же элемент управления на двух отдельных страницах - это то, как я его воспроизвел, но теперь я немного смущен - вы хотите, чтобы они были кешированы отдельно на каждой странице, но они оба находятся в общем нижнем колонтитуле? Можете ли вы поместить часть своей разметки страницы в свой вопрос? Мой демо-код находится по адресу http://cid-5e6d39865220496a.skydrive.live.com/self.aspx/StackOverflow/PartialCaching.zip – PhilPursglove

+1

Весь код выше, теперь я добавил разметку элемента управления - он просто отображает текущее время , Это не полный код, я вытащил все, кроме голого мин. Я намерен использовать элемент управления для кеширования области нижнего колонтитула на многих страницах моего веб-сайта. Область нижнего колонтитула будет одинаковой на всех страницах, кроме одного небольшого аспекта, который я раскрываю как свойство элемента управления - следовательно, необходимо изменить кеш на свойство. Пробовал использовать другой идентификатор на разных страницах - та же проблема. Кэшировано в течение 60 секунд, но только одна кешированная версия, независимо от указанного значения свойства. – PapillonUK