2012-11-30 1 views
1

UserControl에서 OutputCache를 무효화 할 수있는 방법이 있습니까?
UserControls를 사용하여 내 사이트에 부분 캐싱을 설정했는데 정상적으로 작동합니다. 내가 이것을 사용하여 무효화하려고했습니다UserControl에 대한 프로그래밍 방식으로 OutputCache 무효화

<%@ OutputCache Duration="3600" VaryByParam="None" %> 

내 사용자 contrlol 그래서 /UserControls/SomeAction.ascx
에 위치하고 있으며 그것은 작동하지 않았다 :

:
는 내 사용자 컨트롤이 같은 출력 캐시를 설정 한
HttpResponse.RemoveOutputCacheItem("/UserControls/SomeAction.ascx"); 

나는 또한이 방법을 시도 :
내가 Global.asax에의 Application_Start 함수 내에서 HttpContext.Current.Cache.Insert("MyCache",DateTime.Now); 설정 한을, 내 사용자 컨트롤의 Page_Load를 functi 내부 Response.AddCacheItemDependency("MyCache"); 에.
나는 다음 다른 함수를 호출하여 무효화 시도했다 : 그것은 여전히 ​​작동하지 않았다

private void InvalidateCache() 
    { 
     HttpContext.Current.Cache.Insert("MyCache", DateTime.Now); 
    } 

.

프로그래밍 방식으로 UserControl의 캐시를 무효화 할 수있는 방법이 있습니까?

답변

0

이것은 아마도이 문제된다

당신이 캐시 Location = "Server" 그렇지 않은 경우 클라이언트 컴퓨터에 캐시되고

HttpResponse.RemoveOutputCacheItem("/UserControls/SomeAction.ascx");

작동합니다 다음 코드를 설정해야합니다?

+0

'Location = Server'는 사용자 정의 컨트롤에서 지원되지 않습니다. 오류가 발생하여 [여기] (http://msdn.microsoft.com/en-us/library/hdxfb6cy(v=vs.71) .aspx)라고 명시되어 있습니다. – ttkalec

-1

나는

시도는 다른 페이지에서 HttpResponse.RemoveOutputCacheItem("/UserControls/SomeAction.ascx");를 호출 ... 문제는 컨트롤이 기본적으로 캐시에서 자신을 제거하려고하는 것을 의미 컨트롤 자체에서 RemoveOutputCacheItem를 호출하는 것입니다 생각합니다.

+0

나는 컨트롤 자체에서'RemoveOutputCacheItem'을 호출하지 않을 것이다. 그것은 완전히 별개의 페이지에 있습니다. – ttkalec

1

다른 캐시 키에 종속성을 만들려면 usercontrol의 CachePolicy 속성을 사용하십시오. 사용자 컨트롤의 캐시를 무효로 캐시가 현재 웹 응용 프로그램 캐시를 말합니다 경우 예를 들어, 사용자 제어 코드 는

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.CachePolicy.Dependency = new System.Web.Caching.CacheDependency(null, 
     new string[] { "KeyForThisUserControl" }); 
    ... 
} 

어디 다른-,

Cache["KeyForThisUserControl"] = DateTime.Now; 

를 사용합니다.

+0

코드 사용법을 잘 모르겠습니다. 내 'Page_Load' 이벤트 내에서이'CachePolicy.Dependency'를 사용자 정의 컨트롤에 설정하면 캐시가 더 이상 작동하지 않습니다. – ttkalec

+1

@ttkalec 무엇이 문제인지 잘 모르시겠습니까? 캐시 키를 만들기 전에 종속성을 추가하려고 했습니까? 또한'SupportsCaching' 속성을 검사하십시오. 그렇지 않으면 코드가 예외를 throw 할 수 있습니다. 사용자 컨트롤에'PartialCachingAttribute'를 추가하여 캐싱을 활성화 할 수도 있습니다 ('OutCache' 지시어도 동일하게 수행해야합니다). 정책 사용에 대한 자세한 내용은 캐시 정책 문서 (http://msdn.microsoft.com/en-us/library/system.web.ui.controlcachepolicy)를 참조하십시오.aspx – VinayC

+0

감사합니다, 나는 ControlCachePolicy 클래스를 인식하지 못했습니다. – ttkalec