자동 선택 컨트롤 동작의 아키텍처 개요

Visual Studio 2010

업데이트: 2007년 11월

이 항목에서는 ASP.NET의 자동 선택 컨트롤 동작 아키텍처에 대해 간략하게 설명합니다. 이 아키텍쳐를 사용하면 모바일 장치의 브라우저를 비롯한 여러 종류의 브라우저에 맞게 컨트롤 렌더링을 확장할 수 있습니다.

자동 선택 컨트롤 동작은 대상 장치에 맞게 사용자 지정되는 컨트롤 동작입니다. ASP.NET은 컨트롤의 수명 주기 중 핵심 단계를 가로채서 사용자 지정 동작으로 대체할 수 있는 자동 선택 아키텍처를 제공합니다. 기본적으로 ASP.NET 페이지 프레임워크에서는 각 요청에 대해 각 컨트롤에 어댑터의 인스턴스를 하나씩 매핑합니다. 대부분의 경우에는 이 기본 매핑만 사용해도 충분합니다. 그러나 특수한 경우에는 특정 장치 또는 장치 패밀리에서 추가적인 컨트롤 동작 요구 사항을 만족시키기 위해 사용자 지정 어댑터를 파생시킨 후 컨트롤에 매핑할 수 있습니다.

ASP.NET 웹 페이지를 특정 브라우저나 태그에 맞게 렌더링하는 자동 선택 렌더링을 자동 선택 컨트롤 동작의 일반적인 예로 들 수 있습니다. 이 동작은 서로 다른 태그 언어를 사용하는 브라우저를 지원하는 응용 프로그램을 작성하는 경우에 특히 유용합니다. ASP.NET에서 웹 페이지의 자동 선택 렌더링을 제어하는 방법에는 여러 가지가 있습니다. 예를 들면 응용 프로그램의 기본 XHTML 렌더링을 지정하거나 사용자 지정 ControlAdapter 개체를 제공할 수 있습니다. 사용자 지정 ControlAdapter 개체를 제공하는 방법은 고급 작업에 속하며 대부분의 사용자 시나리오에서 필요하지 않습니다.

다음과 같은 방법으로 자동 선택 렌더링을 제어할 수 있습니다.

  • 여러 태그를 렌더링하도록 응용 프로그램을 구성합니다.

  • XhtmlTextWriter 또는 ChtmlTextWriter 클래스를 사용하여 컨트롤의 태그 및 특성을 사용자 지정합니다.

  • 사용자 지정 TextWriter 클래스를 만들어 출력을 렌더링합니다.

  • 선언적 장치 태그 또는 브라우저 필터링을 사용하여 장치 필터 정의를 기반으로 컨트롤 속성을 설정하는 방식에 영향을 줍니다.

  • 컨트롤의 기본 수명 주기 메서드를 어댑터 수명 주기 메서드로 대체할 수 있는 사용자 지정 컨트롤 어댑터를 제공합니다.

자동 선택 렌더링 외에 다음과 같은 컨트롤 동작도 대상 장치에 맞게 자동 선택하거나 지정할 수 있습니다.

  • 포스트백 데이터 처리

  • 뷰 상태 관리

  • 사용자 지정 컨트롤의 자동 선택 방지

기본 렌더링

ASP.NET 웹 페이지를 기본 방식으로 렌더링하면 HtmlTextWriter 클래스의 인스턴스가 만들어지고, HtmlTextWriter 클래스의 인스턴스로 설정된 매개 변수를 사용하여 RenderControl 메서드가 재귀적으로 호출됩니다. 페이지 컨트롤 계층 구조에 있는 각 컨트롤의 태그는 HtmlTextWriter 개체 끝에 추가됩니다. 결과 HtmlTextWriter의 내용이 결과 브라우저에 렌더링됩니다.

HTML 3.2 콘텐츠를 클라이언트에 렌더링할 경우 ASP.NET에서는 자동으로 Html32TextWriter 클래스를 사용합니다. ASP.NET 페이지 프레임워크에서는 사용할 TextWriter 개체의 형식을 결정하기 위해 Browser 개체의 TagWriter 속성을 쿼리합니다.

기본적으로 HTML 4.0 이상을 지원하는 브라우저에서 작업하는 경우 ASP.NET 페이지와 컨트롤은 XHTML 1.0 Transitional 표준에 맞는 태그를 렌더링합니다. ASP.NET에서 XHTML 표준에 맞는 태그를 렌더링할지 여부를 지정하려면 응용 프로그램의 Web.config 파일에서 xhtmlConformance 요소(ASP.NET 설정 스키마)를 구성합니다. ASP.NET 및 XHTML에 대한 자세한 내용은 ASP.NET 및 XHTML을 참조하십시오. 페이지 수명 주기에 대한 자세한 내용은 ASP.NET 페이지 수명 주기 개요를 참조하십시오.

사용자 지정 TextWriter 개체 사용

기본적으로 ASP.NET에서는 요청한 장치에 적합한 TextWriter 개체를 사용합니다. TextWriter를 더 세부적으로 제어해야 할 경우에는 HtmlTextWriter 클래스에서 상속되는 기존 클래스를 사용하거나 사용자 지정 텍스트 작성기를 만들 수 있습니다.

XhtmlTextWriterChtmlTextWriter 클래스는 ASP.NET 페이지 프레임워크에서 각각 HtmlTextWriterHtml32TextWriter 클래스에서 상속되는 두 가지 클래스입니다. XhtmlTextWriterChtmlTextWriter 클래스는 추가적인 자동 선택 렌더링 기능을 제공합니다. 예를 들면 다음과 같습니다.

  • XhtmlTextWriter 클래스는 XHTML 태그를 모바일 장치에 렌더링하는 데 유용하며, 렌더링된 XHTML 요소의 특성을 사용자 지정할 수 있는 메서드를 제공합니다.

  • ChtmlTextWriter 클래스는 작은 디스플레이 화면, 제한된 서식 지정 기능 및 제한된 수의 입력 옵션(예: 휴대 전화 터치 패드)을 비롯하여 제한된 메모리와 CPU 성능을 가진 장치에서 cHTML(compact HTML)을 렌더링하는 경우에 유용합니다.

사용자 지정 텍스트 작성기를 만들거나 특정 장치에 대해 출력을 렌더링할 텍스트 작성기를 특별히 지정하려면 응용 프로그램의 .browser 파일에서 controlAdapters 요소의 markupTextWriterType 특성을 사용하는 장치에 텍스트 작성기를 매핑해야 합니다.

장치 필터링

장치 필터링을 사용하면 웹 서버 컨트롤 속성의 출력 렌더링 측면을 선언적으로 사용자 지정할 수 있습니다. 필터링은 컨트롤 속성, 사용자 지정 특성 및 템플릿에 적용할 수 있습니다. @ Page@ Control 지시문의 일부 특성에 대해 장치 필터링을 사용할 수도 있습니다. 특정 속성이나 특성에 장치 필터를 여러 개 지정한 경우에는 가장 구체적인 필터가 우선합니다.

  1. 출력을 필터링하는 데 사용되는 장치 필터 정의는 응용 프로그램에 정의되어 있는 브라우저 형식 정의에 기반합니다. 기본 브라우저 정의 파일은 %SystemRoot%\Microsoft.NET\Framework\versionNumber\CONFIG\Browsers 디렉터리에 저장됩니다. 응용 프로그램의 App_Browsers 폴더에 지정된 브라우저 정의 파일은 기본 정의 파일에 병합됩니다.

장치 필터링에 대한 자세한 내용은 ASP.NET 장치 필터링 개요를 참조하십시오. .browser 파일 형식에 대한 자세한 내용은 브라우저 정의 파일 스키마(browsers 요소)를 참조하십시오.

개요

ASP.NET에서는 컨트롤의 수명 주기 동안 특정 단계의 동작을 자동 선택하거나 수정하는 ControlAdapter 개체를 지정하여 페이지나 컨트롤의 동작을 사용자 지정할 수 있습니다. 수명 주기 메서드가 호출되는 각 수명 주기 단계에서 ASP.NET 페이지 프레임워크는 컨트롤에 어댑터가 연결되었는지 확인한 후 컨트롤의 메서드 대신 해당 어댑터에 연결된 메서드를 호출합니다. 대부분의 경우에는 단순히 컨트롤의 메서드가 어댑터 메서드에 우선할 수 있습니다. 그러나 자동 선택 동작이 컨트롤의 상태에 추가되는 상태 관리용 어댑터에 대해서는 이 동작이 적용되지 않습니다.

다음과 같은 경우에는 컨트롤의 동작을 컨트롤 어댑터로 재정의하는 것이 좋습니다.

  • 컨트롤 수명 주기의 특정 단계 동안 대상별 처리 기능을 제공하려는 경우

    예를 들어, ControlAdapter 클래스의 OnInit 메서드를 사용하여 어댑터가 연결된 컨트롤 및 컨트롤이 렌더링되는 대상 장치에 대해 고유한 초기화 작업을 수행할 수 있습니다.

  • 대상별 렌더링을 사용자 지정하려는 경우

    예를 들어, RenderRenderChildren 메서드를 사용하여 대상별 태그를 생성할 수 있습니다.

WebControlAdapter 및 PageAdapter 컨트롤

ControlAdapter 클래스는 모든 어댑터의 기본 기능을 정의하는 추상 클래스입니다. 이 클래스는 WebControlAdapterPageAdapter 클래스의 기본 클래스로 사용됩니다.

WebControlAdapter 클래스는 WebControl 클래스에서 자동 선택 방식으로 상속되는 컨트롤을 렌더링하기 위한 시작점입니다. WebControlAdapter 클래스는 ControlAdapter 클래스 메서드 외에 태그 렌더링과 관련된 몇 가지 메서드를 추가합니다.

추상 PageAdapter 클래스는 자동 선택 방식으로 웹 페이지를 렌더링하기 위한 시작점입니다.

또한 PageAdapter 클래스는 캐싱이나 페이지 상태 지속성 관리 같은 일반적인 페이지 수준 작업의 컨텍스트에서 자동 선택 렌더링을 사용할 수 있도록 하는 속성과 메서드를 정의합니다. 예를 들어, 대상 독립적인 매개 변수를 기준으로 페이지를 캐시하는 것 이외에 대상 브라우저의 형식을 기준으로 캐시해야 할 수도 있습니다. 이런 경우에는 대상별 캐싱을 제어하는 추가적인 GET 또는 POST 매개 변수 목록을 반환하도록 PageAdapter 클래스의 CacheVaryByParams 속성을 재정의할 수 있습니다.

ASP.NET 페이지 프레임워크에서 사용자 지정 컨트롤 어댑터를 인식하려면 사용자 지정 텍스트 작성기의 경우와 마찬가지로 응용 프로그램의 .browser 파일에서 controlAdapters 요소에 사용자 지정 컨트롤 어댑터를 정의해야 합니다. .browser 파일 형식에 대한 자세한 내용은 브라우저 정의 파일 스키마(browsers 요소)를 참조하십시오.

어댑터 생성을 위한 디자인 패턴에 대해 다음 사항을 염두에 두어야 합니다.

  • Control 클래스에서 상속되는 컨트롤에는 ControlAdapter 클래스에서 상속되는 어댑터가 있어야 합니다.

  • WebControl 클래스에서 상속되는 컨트롤에는 WebControlAdapter 클래스에서 상속되는 어댑터가 있어야 합니다.

  • 어댑터 기능을 확장해야 하는 사용자 지정 컨트롤을 만들 경우 개발자는 해당 컨트롤에 대한 기본 클래스 어댑터를 만들어야 합니다.

표시: