Substitution 웹 서버 컨트롤 개요

업데이트: 2007년 11월

Substitution 컨트롤을 사용하면 페이지에 동적으로 업데이트할 수 있는 영역을 만든 다음 캐시된 페이지에 통합할 수 있습니다.

이 항목의 내용은 다음과 같습니다.

  • 시나리오

  • 배경

  • 코드 예제

  • 클래스 참조

시나리오

Substitution 컨트롤을 사용하여 동적 콘텐츠를 표시할 출력 캐시된 웹 페이지의 섹션을 지정할 수 있습니다. Substitution 컨트롤은 콘텐츠 대부분이 캐시되는 페이지에서 부분 페이지 캐싱을 하려는 경우에 간단하게 사용할 수 있습니다. 페이지 전체를 출력 캐시한 후 Substitution 컨트롤을 사용하여 캐싱에서 제외할 페이지 부분을 지정하면 됩니다. 캐시된 영역은 한 번만 실행되고 캐시 엔트리가 만료되거나 제거될 때까지 캐시로부터 읽습니다. 동적 영역은 페이지가 요청될 때마다 실행됩니다. 웹 사용자 정의 컨트롤에 캐시할 섹션을 캡슐화할 필요가 없으므로 이 캐싱 모델은 주로 정적 페이지의 코드를 단순화합니다. 예를 들어 이 캐싱 모델은 뉴스 내용 같은 정적 내용과 광고를 표시하는 AdRotator 컨트롤을 포함하는 페이지가 있는 경우에 유용합니다. 뉴스 내용은 자주 변경되지 않으므로 캐시될 수 있지만 사용자가 페이지를 요청할 때마다 새 광고를 표시할 수 있습니다. AdRotator 컨트롤은 캐시 후 대체를 직접 지원하고 페이지가 캐시되는지 여부에 관계없이 페이지가 포스트백될 때마다 새 광고를 렌더링합니다.

맨 위로 이동

배경

ASP.NET 페이지가 캐시되면 기본적으로 페이지의 전체 출력이 캐시됩니다. 첫 번째 요청에서 페이지가 실행되고 해당 출력이 캐싱됩니다. 후속 요청에서는 캐시의 내용으로 요청이 처리되므로 페이지의 코드가 실행되지 않습니다.

일부 경우에는 ASP.NET 페이지를 캐시하지만 모든 요청에 대해 페이지의 선택된 부분을 업데이트할 수 있습니다. 예를 들어, 페이지의 대부분은 캐싱하지만 페이지에서 시간에 따라 달라지는 정보는 동적으로 업데이트할 수 있습니다.

Substitution 컨트롤을 사용하여 동적 콘텐츠를 캐시된 페이지에 삽입할 수 있습니다. Substitution 컨트롤은 태그를 렌더링하지 않습니다. 대신 컨트롤을 페이지 또는 부모 사용자 정의 컨트롤의 메서드에 바인딩합니다. 페이지에 삽입할 정보를 반환하는 정적 메서드를 만듭니다. Substitution 컨트롤에서 호출하는 메서드는 다음 조건을 충족해야 합니다.

  • Visual Basic에서 공유되는 정적 메서드여야 합니다.

  • HttpContext 형식의 매개 변수를 사용해야 합니다.

  • String 형식의 값을 반환해야 합니다.

Substitution 컨트롤에서는 페이지의 다른 컨트롤에 액세스할 수 없습니다. 즉, 다른 컨트롤의 값은 확인하거나 변경할 수 없습니다. 그러나 코드에서는 전달된 매개 변수를 사용하여 현재 페이지 컨텍스트에 액세스할 수 있습니다.

페이지가 실행되면 Substitution 컨트롤은 해당 메서드를 호출한 다음 Substitution 컨트롤의 메서드에서 반환된 값을 페이지에 대체합니다.

맨 위로 이동

코드 예제

다음 코드 예제에서는 Substitution 컨트롤을 사용하여 캐시된 페이지에 동적으로 업데이트되는 콘텐츠를 만드는 방법을 보여 줍니다. 페이지의 Load 이벤트 코드는 Label 컨트롤을 현재 시간으로 업데이트합니다. 페이지의 캐시 기간이 60초로 설정되어 있기 때문에 60초 동안은 페이지가 여러 번 요청되어도 Label 컨트롤의 텍스트가 변경되지 않습니다. 페이지의 Substitution 컨트롤은 현재 시간을 문자열로 반환하는 정적 메서드 GetTime을 호출합니다. 페이지를 새로 고칠 때마다 Substitution 컨트롤이 나타내는 값이 업데이트됩니다.

<%@ Page Language="VB" %>
<%@ OutputCache Duration=60 VaryByParam="None" %>

<script >
    Sub Page_Load()
        Label1.Text = DateTime.Now.ToString()
    End Sub

    Public Shared Function GetTime(ByVal context As HttpContext) _
            As String
        Return DateTime.Now.ToString()
    End Function
</script>

<html>
<head ></head>
<body>
    <form id="form1" >
    <div>
    <p>
    <asp:Label  ID="Label1" />
    </p>
    <p>
    <asp:Substitution  
        ID="Substitution1" 
        MethodName="GetTime" />
    </p>
    <p>
    <asp:Button  ID="Button1" Text="Submit"/>
    </p>
    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" %>
<%@ OutputCache Duration=60 VaryByParam="None" %>

<script >
    void Page_Load()
    {
        Label1.Text = DateTime.Now.ToString();
    }
    
    public static String GetTime(HttpContext context)
    {
      return DateTime.Now.ToString();
    }
</script>
<html>
<head ></head>
<body>
    <form id="form1" >
    <div>
    <p>
    <asp:Label  ID="Label1" />
    </p>
    <p>
    <asp:Substitution  
        ID="Substitution1" 
        MethodName="GetTime" />
    </p>
    <p>
    <asp:Button  ID="Button1" Text="Submit"/>
    </p>
    </div>
    </form>
</body>
</html>

맨 위로 이동

클래스 참조

다음 표에서는 Substitution 컨트롤과 관련된 클래스를 보여 줍니다.

멤버

설명

Substitution

컨트롤의 기본 클래스입니다.

맨 위로 이동

참고 항목

개념

캐시된 페이지의 일부를 동적으로 업데이트