Asp.Net OutputCache и срок действия - PullRequest
4 голосов
/ 27 января 2009

Я использую Asp.net OutputCache на странице, содержащей usercontrol, который при определенных обстоятельствах, когда usercontrol редактируется, я хочу иметь возможность закончить кеш страницы и перезагрузить страницу свежими данными.

Есть ли способ, которым я могу сделать это из пользовательского контроля?

Если нет, то каковы другие способы кэширования страницы, которые позволят мне редактировать таким образом.

----------- РЕДАКТИРОВАТЬ -----------

После еще одного исследования я нашел метод, который, кажется, хорошо работает.

Dim cachekey As String = String.Format("Calendar-{0}", calendarID)
HttpContext.Current.Cache.Insert(cachekey, DateTime.Now, Nothing, System.DateTime.MaxValue, System.TimeSpan.Zero, System.Web.Caching.CacheItemPriority.NotRemovable, Nothing)
Response.AddCacheItemDependency(cachekey)

, который добавит зависимость к объекту кэша страницы, а затем для истечения срока действия я делаю это:

Dim cachekey as string = String.Format("Calendar-{0}", CalendarID)
HttpContext.Current.Cache.Insert(cachekey, DateTime.Now, Nothing, System.DateTime.MaxValue, System.TimeSpan.Zero, System.Web.Caching.CacheItemPriority.NotRemovable, Nothing)

Теперь, пока известен кеш-ключ зависимости, срок действия страницы может истечь.

Ответы [ 3 ]

1 голос
/ 25 февраля 2011

Ваше решение не сработало для меня. Однако ... после некоторого тестирования я получил это, чтобы работать нормально. Этот код будет внутри вашей UserControl Page_Load, который необходимо кэшировать.

string key_refresh = "refresh_id_" + YourID;
Cache[key_refresh] = DateTime.Now.ToString();

CacheDependency dep = new CacheDependency(null, new string[] { key_refresh });
this.CachePolicy.Dependency = dep;

По какой-то причине использование Response.AddCacheItemDependency не имело никакого эффекта, когда я обновлял свои данные с Cache[key_refresh].

В моем случае я кэширую свой элемент управления по идентификатору пользователя, поэтому у каждого пользователя будет своя версия этого элемента управления с разными данными, я использую VaryByCustom для индивидуального кэширования.

1 голос
/ 27 января 2009

Вы можете попробовать это:

private void RemoveButton_Click(object sender, System.EventArgs e)
{
    HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");
}

От: http://aspalliance.com/668

Спасибо.

0 голосов
/ 09 декабря 2009

После еще одного исследования я нашел метод, который, кажется, хорошо работает.

Dim cachekey As String = String.Format("Calendar-{0}", calendarID)
HttpContext.Current.Cache.Insert(cachekey, DateTime.Now, Nothing, System.DateTime.MaxValue, System.TimeSpan.Zero, System.Web.Caching.CacheItemPriority.NotRemovable, Nothing)
Response.AddCacheItemDependency(cachekey)

, который добавит зависимость к объекту кэша страницы, а затем для истечения срока действия я делаю это:

Dim cachekey as string = String.Format("Calendar-{0}", CalendarID)
HttpContext.Current.Cache.Insert(cachekey, DateTime.Now, Nothing, System.DateTime.MaxValue, System.TimeSpan.Zero, System.Web.Caching.CacheItemPriority.NotRemovable, Nothing)

Теперь, пока известен кеш-ключ зависимости, срок действия страницы может истечь.

...