#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. Если решаемая, пожалуйста, отметьте как правильный ответ. Рад, что смог помочь.