использование кэширования в user control и VaryByControl

#asp.net #caching #outputcache

#asp.net #кэширование #outputcache

Вопрос:

У меня есть пользовательский элемент управления в моем asp.net приложение, которое загружает данные из кэша. я хочу, чтобы кэш обновлялся при изменении значения переменной, поэтому я поместил этот код в директиву page

  <%@ OutputCache Duration="1000" VaryByParam="none"
 VaryByControl="visitIsAu" %>
  

это отлично работает, когда я изменяю значение переменной в разметке следующим образом

  visitIsAu="true"
  

но это не работает, когда значение изменяется с помощью кода, подобного этому

    visitIsAu="<%=this.CurentUser.IsAuthorizedToVisitFiltered%>"
  

значение переменной не изменяется, поэтому ее кэш не обновляется.

кто-нибудь знает, почему это происходит?

Комментарии:

1. Может быть, заменить его на visitIsAu="<%#this.CurentUser.IsAuthorizedToVisitFiltered%>" ?

2. @Уве Кейм: я пробовал это, но это не сработало.

3. звучит как проблема жизненного цикла страницы. вы не можете просто установить значение для предыдущего события, такого как pageInit, на стороне сервера? Я думаю, что это не работает, поскольку оценка параметра visitIsAu запускается после установки кэша, поэтому вам придется изменить его до этого…

4. Какой тип управления является visitIsAu? И я думаю, вы хотите установить значение в разметке, а не в коде позади. Дайте нам знать, прав ли я. Если это так, вы можете решить эту проблему с помощью <script runat=»server»> protected void Page_Load(отправитель объекта, EventArgs e) { visitIsAu=»true»} </script>

Ответ №1:

По какой-то причине я никогда не доверял способу ASP.NET обрабатывает кэш, используя настройки разметки или используя «введенные» серверные теги в aspx-файлах. Я знаю, что это работает, но им легко управлять только в простых сценариях.

Я всегда реализую управление кэшем, при использовании пользовательских элементов управления, на уровне code behind и принимая во внимание тот жизненный цикл страницы, который может иметь некоторые перехваты на уровне элементов управления, у меня есть определенная страница.

У нас может быть: ascx> aspx или ascx > aspx > master.

В вашем случае вам необходимо гарантировать, что CurrentUser установлен до загрузки вашего пользовательского элемента управления. Проверьте это с помощью debug.

Комментарии:

1. Если решаемая, пожалуйста, отметьте как правильный ответ. Рад, что смог помочь.