-
대체 컨트롤을 사용하면 동적으로 업데이트되고 나중에 캐시된 페이지에 통합될 수 있는 웹 페이지 영역을 만들 수 있습니다.
1. 계획
대체 컨트롤을 사용하여 동적 콘텐츠의 출력을 캐시하려는 웹 페이지 부분을 지정합니다. 대부분의 콘텐츠가 캐시되는 페이지의 경우 대체 컨트롤은 부분 페이지 캐싱을 위한 단순화된 솔루션을 제공합니다. 전체 페이지의 출력을 캐시한 다음 대체 컨트롤을 사용하여 캐시되지 않은 페이지 부분을 지정할 수 있습니다. 캐시 영역은 한 번만 실행되며 캐시 항목이 만료되거나 지워질 때까지 캐시에서 읽혀집니다. 페이지가 요청될 때마다 동적 영역이 실행됩니다. 이 캐싱 모델은 정적 콘텐츠를 캐시에 넣기 위해 웹 사용자 정의 컨트롤에 캡슐화할 필요가 없기 때문에 콘텐츠가 대부분 정적인 웹 페이지의 코딩을 단순화합니다. 예를 들어 이 캐싱 모델은 정적 콘텐츠(예: 뉴스 기사)가 포함된 웹 페이지와 광고를 표시하는 AdRotator 컨트롤에 유용합니다. 뉴스 기사는 자주 변경되지 않으므로 캐시될 수 있습니다. 사용자가 페이지를 요청할 때마다 새 광고를 표시할 수 있습니다. AdRotator 컨트롤은 웹페이지의 캐시 여부에 관계없이 웹페이지의 각 포스트백에서 새 광고를 렌더링하는 캐시 후 교체를 직접 지원합니다.
2. 배경
ASP.NET 웹 페이지를 캐시하면 기본적으로 페이지의 모든 출력이 캐시됩니다. 첫 번째 요청에서 페이지가 실행되고 해당 출력이 캐시됩니다. 후속 요청의 경우 이는 캐싱을 통해 수행되며 해당 페이지의 코드는 실행되지 않습니다.
경우에 따라 ASP.NET 웹 페이지를 캐시할 뿐만 아니라 페이지가 요청될 때마다 페이지의 선택된 부분을 업데이트할 수도 있습니다. 예를 들어, 페이지의 많은 부분을 캐시하고 싶지만 페이지에서 매우 시간에 민감한 정보를 동적으로 업데이트해야 할 수 있습니다.
대체 컨트롤을 사용하여 캐시된 페이지에 동적 콘텐츠를 삽입할 수 있습니다. 대체 컨트롤은 마크업을 렌더링하지 않습니다. 따라서 웹 페이지 또는 상위 사용자 컨트롤의 메서드에 컨트롤을 바인딩해야 합니다. 웹 페이지에 삽입할 정보를 반환하는 정적 메서드를 만들어야 합니다. 대체 컨트롤에 의해 호출되는 메서드는 다음 기준을 충족해야 합니다.
·정적 메서드여야 합니다(Visual Basic에서 공유됨).
·HttpContext 유형의 매개변수를 승인해야 합니다.
·문자열 유형의 값을 반환해야 합니다.
대체 컨트롤은 웹 페이지의 다른 컨트롤에 액세스할 수 없습니다. 즉, 다른 컨트롤의 값을 검사하거나 변경할 수 없습니다. 그러나 코드는 전달된 매개변수를 사용하여 현재 페이지의 컨텍스트에 액세스할 수 있습니다.
페이지가 실행되면 대체 컨트롤이 이 메서드를 호출한 다음 페이지의 대체 컨트롤을 메서드의 반환 값으로 바꿉니다.
코드 예
다음 예제에서는 Substitution 컨트롤을 사용하여 캐시된 페이지에서 동적으로 업데이트 가능한 콘텐츠를 만드는 방법을 보여줍니다. 페이지의 Load 이벤트 코드는 Label 컨트롤을 현재 시간으로 업데이트합니다. 페이지의 캐시 기간이 60초로 설정되었기 때문에 페이지가 60초 내에 여러 번 요청되더라도 Label 컨트롤의 텍스트는 변경되지 않습니다. 페이지의 대체 컨트롤은 현재 시간을 문자열로 반환하는 정적 메서드 GetTime을 호출합니다. 웹 페이지를 새로 고칠 때마다 대체 컨트롤이 나타내는 값이 업데이트됩니다.
<%@ 페이지 언어="C#" %>
<%@ OutputCache 기간=60 VaryByParam="없음" %>
<스크립트 runat="서버">
무효 Page_Load()
{
Label1.Text = DateTime.Now.ToString();
}
공개 정적 문자열 GetTime(HttpContext 컨텍스트)
{
DateTime.Now.ToString()을 반환합니다.
}
<본문>