ASP.NET 2.0은 여러 가지 방법으로 서버 컨트롤을 향상시킵니다. 이 모듈에서는 ASP.NET 2.0 및 Visual Studio 2005에서 서버 컨트롤을 처리하는 방식에 대한 아키텍처 변경 내용 중 일부를 설명합니다.
ASP.NET 2.0은 여러 가지 방법으로 서버 컨트롤을 향상시킵니다. 이 모듈에서는 ASP.NET 2.0 및 Visual Studio 2005에서 서버 컨트롤을 처리하는 방식에 대한 아키텍처 변경 내용 중 일부를 설명합니다.
상태 보기
ASP.NET 2.0의 보기 상태의 주요 변경은 크기가 크게 감소하는 것입니다. 일정 컨트롤만 있는 페이지를 고려합니다. ASP.NET 1.1의 뷰 상태는 다음과 같습니다.
dDwtMTg1NDkwMjc0Nzt0PDtsPGk8MT47PjtsPHQ8O2w8aTwxPjs
+O2w8dDxAMDxwPHA8bDxTRDs+O2w8bDxTeXN0ZW0uRGF0ZVRpbWUsIG1
zY29ybGliLCBWZXJzaW9uPTEuMC41MDAwLjAsIEN1bHR1cmU9bmV1dHJ
hbCwgUHVibGljS2V5VG9rZW49Yjc3YTVjNTYxOTM0ZTA4OTwyMDA1LTE
xLTA4Pjs+Oz4+Oz47Ozs7Ozs7Ozs7Pjs7Pjs+Pjs+Pjs+lkX2YWqfACtP
/VWr8G03pob/+tU=
이제 ASP.NET 2.0의 동일한 페이지에 있는 보기 상태입니다.
/wEPDwULLTEzNjg5MjAxMzgPZBYCAgMPZBYCAgEPPCsAC
gEADxYCHgJTRBYBBgDAEX8OsscIZGRkllfArINjlhvzQX7Xfign2q6HK5E=
이는 매우 중요한 변화이며, 보기 상태가 유선으로 앞뒤로 수행된다는 점을 고려하면 이러한 변경으로 개발자의 성능이 크게 향상될 수 있습니다. 뷰 상태의 크기 감소는 주로 내부적으로 처리하는 방식 때문입니다. 뷰 상태는 Base64로 인코딩된 문자열입니다. ASP.NET 2.0의 보기 상태 변경을 더 잘 이해하기 위해 위의 예제에서 디코딩된 값을 살펴보겠습니다.
디코딩된 1.1 뷰 상태는 다음과 같습니다.
t<-1854902747;t<;l<i<1>;>;l<t<;l<
i<1>;>;l<t<@0<p<p<l<SD;>;l<l<
System.DateTime, mscorlib, Version=1.0.5000.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089<2005-11-08>;>;>>;
>;;;;;;;;;;>;;>;>>;>>;>Eaj
이것은 횡설수설처럼 보일 수 있지만 여기에 패턴이 있습니다. ASP.NET 1.x에서는 단일 문자를 사용하여 문자를 사용하여 데이터 형식 및 구분된 값을 식별했습니다 <> . 위의 뷰 상태 샘플에서 "t"는 Triplet를 나타냅니다. Triplet에는 ArrayLists 쌍이 포함되어 있습니다("l"은 ArrayList를 나타냅니다.) 이러한 ArrayLists 중 하나는 값이 1인 Int32("i")를 포함하고 다른 하나는 다른 Triplet를 포함합니다. Triplet에는 ArrayLists 쌍 등이 포함됩니다. 기억해야 할 중요한 점은 쌍이 포함된 Triplet를 사용하고, 문자를 통해 데이터 형식을 식별하고, 및 > 문자를 구분 기호로 사용 < 한다는 것입니다.
ASP.NET 2.0에서는 디코딩된 뷰 상태가 약간 다르게 보입니다.
-1368920138 d
d
SD
dddWc A ('ڮ
디코딩된 뷰 상태의 모양이 크게 변경됩니다. 이러한 변화에는 몇 가지 아키텍처 기반이 있습니다. ASP.NET 1.x의 뷰 상태는 LosFormatter를 사용하여 데이터를 직렬화했습니다. 2.0에서는 새 ObjectStateFormatter 클래스를 사용합니다. 이 클래스는 뷰 상태 및 제어 상태의 직렬화 및 역직렬화를 지원하도록 특별히 설계되었습니다. (제어 상태는 다음 섹션에서 다룹니다.) serialization 및 deserialization이 수행되는 메서드를 변경하여 얻을 수 있는 많은 이점이 있습니다. 가장 극적인 것 중 하나는 TextWriter를 사용하는 LosFormatter와 달리 ObjectStateFormatter가 BinaryWriter를 사용한다는 사실입니다. 이렇게 하면 ASP.NET 2.0에서 뷰 상태를 문자열 대신 일련의 바이트를 저장할 수 있습니다. 예를 들어 정수입니다. ASP.NET 1.1에서는 정수에 4바이트 뷰 상태가 필요했습니다. ASP.NET 2.0에서는 동일한 정수에 1 바이트만 필요합니다. 저장되는 보기 상태의 양을 줄이기 위해 다른 향상된 기능이 적용되었습니다. 예를 들어 DateTime 값은 이제 문자열 대신 TickCount를 사용하여 저장됩니다.
이 모든 것이 충분하지 않은 것처럼, 1.x에서 뷰 상태의 가장 큰 소비자 중 하나가 DataGrid 및 유사한 컨트롤이라는 사실에 특별한 주의를 기울였습니다. 뷰 상태가 우려되는 DataGrid와 같은 컨트롤의 주요 단점은 종종 많은 양의 반복 정보가 포함되어 있다는 것입니다. ASP.NET 1.x에서는 반복된 정보가 반복해서 저장되어 보기 상태가 부풀어 오르는 결과를 초래했습니다. ASP.NET 2.0에서는 새 IndexedString 클래스를 사용하여 이러한 데이터를 저장합니다. 문자열이 반복되면 IndexedString에 대한 토큰과 IndexedString 개체의 실행 중인 테이블 내에 인덱스를 저장합니다.
제어 상태
개발자가 보기 상태에 대한 주요 불만 사항 중 하나는 HTTP 페이로드에 추가된 크기였습니다. 앞에서 설명한 것처럼 뷰 상태의 가장 큰 소비자 중 하나는 DataGrid 컨트롤입니다. DataGrid에서 생성되는 막대한 양의 보기 상태를 방지하기 위해 많은 개발자가 해당 컨트롤에 대해 보기 상태를 사용하지 않도록 설정했습니다. 불행히도, 그 해결책이 항상 좋은 것은 아니었습니다. ASP.NET 1.x의 보기 상태에는 컨트롤의 올바른 기능에 필요한 데이터만 포함됩니다. 컨트롤의 UI 상태에 관한 정보도 포함됩니다. 즉, DataGrid에서 페이지 매김을 허용하려면 보기 상태에 포함된 UI 정보가 모두 필요하지 않더라도 보기 상태를 사용하도록 설정해야 합니다. 모두 또는 전혀 없는 시나리오입니다.
ASP.NET 2.0에서 제어 상태는 제어 상태의 도입을 통해 해당 문제를 잘 해결합니다. 컨트롤 상태에는 컨트롤의 적절한 기능에 절대적으로 필요한 데이터가 포함됩니다. 뷰 상태와 달리 제어 상태를 사용하지 않도록 설정할 수 없습니다. 따라서 제어 상태에 저장되는 데이터를 신중하게 제어하는 것이 중요합니다.
참고
컨트롤 상태는 __VIEWSTATE 숨겨진 양식 필드의 보기 상태와 함께 유지됩니다.
이 비디오는 보기 상태 및 제어 상태의 연습입니다.
서버 컨트롤이 컨트롤 상태를 읽고 쓰려면 세 단계를 수행해야 합니다.
1단계: RegisterRequiresControlState 메서드 호출
RegisterRequiresControlState 메서드는 컨트롤이 제어 상태를 유지해야 한다는 것을 ASP.NET 알려줍니다. 등록 중인 컨트롤인 Control 형식의 인수를 하나 사용합니다.
요청에서 요청까지 등록이 유지되지 않는다는 점에 유의해야 합니다. 따라서 컨트롤이 컨트롤 상태를 유지하는 경우 모든 요청에서 이 메서드를 호출해야 합니다. OnInit에서 메서드를 호출하는 것이 좋습니다.
protected override void OnInit(EventArgs e) { Page.RegisterRequiresControlState(this); base.OnInit(e); }
2단계: SaveControlState 재정의
SaveControlState 메서드는 마지막 포스트백 이후 컨트롤의 컨트롤 상태 변경 내용을 저장합니다. 컨트롤의 상태를 나타내는 개체를 반환합니다.
3단계: LoadControlState 재정의
LoadControlState 메서드는 저장된 상태를 컨트롤에 로드합니다. 메서드는 컨트롤에 대해 저장된 상태를 보유하는 Object 형식의 인수를 하나 사용합니다.
전체 XHTML 규정 준수
모든 웹 개발자는 웹 애플리케이션에서 표준의 중요성을 알고 있습니다. 표준 기반 개발 환경을 유지하기 위해 ASP.NET 2.0은 완전히 XHTML 규격입니다. 따라서 모든 태그는 HTML 4.0 이상을 지원하는 브라우저의 XHTML 표준에 따라 렌더링됩니다.
ASP.NET 1.1의 DOCTYPE 정의는 다음과 같습니다.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN
ASP.NET 2.0에서 기본 DOCTYPE 정의는 다음과 같습니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
선택하는 경우 구성 파일의 xhtmlConformance 노드를 통해 기본 XHTML 규정 준수를 변경할 수 있습니다. 예를 들어 web.config 파일의 다음 노드는 XHTML 준수를 XHTML 1.0 Strict로 변경합니다.
<xhtmlConformance mode="Strict" />
선택하는 경우 다음과 같이 ASP.NET 1.x에서 사용되는 레거시 구성을 사용하도록 ASP.NET 구성할 수도 있습니다.
<xhtmlConformance mode="Legacy" />
어댑터를 사용한 적응형 렌더링
ASP.NET 1.x에서 구성 파일에는 <HttpBrowserCapabilities 개체를 채우는 browserCaps> 섹션이 포함되어 있습니다. 이 개체를 사용하면 개발자가 특정 요청을 수행하고 있는 디바이스를 확인하고 코드를 적절하게 렌더링할 수 있습니다. ASP.NET 2.0에서는 모델이 개선되었으며 이제 새 ControlAdapter 클래스를 사용합니다. ControlAdapter 클래스는 컨트롤의 수명 주기에서 이벤트를 재정의하고 사용자 에이전트의 기능에 따라 컨트롤의 렌더링을 제어합니다. 특정 사용자 에이전트의 기능은 c:\windows\microsoft.net\framework\v2.0.****\CONFIG\Browsers 폴더에 저장된 브라우저 정의 파일(.browser 파일 확장명의 파일)에 의해 정의됩니다.
참고
ControlAdapter 클래스는 추상 클래스입니다.
1.x의 <browserCaps 섹션과> 마찬가지로 브라우저 정의 파일은 정규식을 사용하여 요청 브라우저를 식별하기 위해 사용자 에이전트 문자열을 구문 분석합니다. 해당 사용자 에이전트에 대한 특정 기능을 정의합니다. ControlAdapter는 Render 메서드를 통해 컨트롤을 렌더링합니다. 따라서 Render 메서드를 재정의하는 경우 기본 클래스에서 Render를 호출하면 안 됩니다. 이렇게 하면 어댑터에 대해 한 번, 컨트롤 자체에 대해 한 번 렌더링이 두 번 발생할 수 있습니다.
사용자 지정 어댑터 개발
ControlAdapter에서 상속하여 사용자 지정 어댑터를 직접 개발할 수 있습니다. 또한 페이지에 어댑터가 필요한 경우 추상 클래스 PageAdapter에서 상속할 수 있습니다. 사용자 지정 어댑터에 대한 컨트롤 매핑은 브라우저 정의 파일의 <controlAdapters> 요소를 통해 수행됩니다. 예를 들어 브라우저 정의 파일의 다음 XML은 Menu 컨트롤을 MenuAdapter 클래스에 매핑합니다.
<controlAdapters> <adapter controlType="System.Web.UI.WebControls.Menu" adapterType="System.Web.UI.WebControls.Adapters.MenuAdapter" /> </controlAdapters>
이 모델을 사용하면 컨트롤 개발자가 특정 디바이스 또는 브라우저를 쉽게 대상으로 지정할 수 있습니다. 또한 개발자가 모든 디바이스에서 페이지가 렌더링되는 방식을 완벽하게 제어할 수 있습니다.
Per-Device 렌더링
ASP.NET 2.0의 서버 제어 속성은 브라우저별 접두사를 사용하여 디바이스별로 지정할 수 있습니다. 예를 들어 아래 코드는 페이지를 찾아보는 데 사용되는 디바이스에 따라 레이블의 텍스트를 변경합니다.
<asp:Label ID="lblBrowser" runat="server" Text="You are browsing from an unknown device." ie:Text="You are browsing from Internet Explorer." mozilla:Text="You are browsing from Firefox."> </asp:Label>
이 레이블이 포함된 페이지를 인터넷 Explorer 검색하면 레이블에 "인터넷 Explorer 검색 중"이라는 텍스트가 표시됩니다. Firefox에서 페이지를 검색하면 레이블에 "Firefox에서 검색하는 중"이라는 텍스트가 표시됩니다. 페이지가 다른 장치에서 검색되면 "알 수 없는 디바이스에서 검색 중"이 표시됩니다. 이 특수 구문을 사용하여 모든 속성을 지정할 수 있습니다.
포커스 설정
ASP.NET 1.x 개발자는 특정 컨트롤에 초기 포커스를 설정하는 방법에 대해 자주 물었습니다. 예를 들어 로그인 페이지에서 페이지가 처음 로드되면 사용자 ID 텍스트 상자에 포커스를 맞추는 것이 유용합니다. ASP.NET 1.x에서 이 작업을 수행하려면 일부 클라이언트 쪽 스크립트를 작성해야 했습니다. 이러한 스크립트는 간단한 작업이지만 SetFocus 메서드 덕분에 ASP.NET 2.0에서 더 이상 필요하지 않습니다. SetFocus 메서드는 포커스를 받아야 하는 컨트롤을 나타내는 하나의 인수를 사용합니다. 이 인수는 문자열로 컨트롤의 클라이언트 ID 또는 Control 개체로 서버 컨트롤의 이름이 될 수 있습니다. 예를 들어 페이지가 처음 로드되면 txtUserID라는 TextBox 컨트롤로 초기 포커스를 설정하려면 다음 코드를 Page_Load 추가합니다.
if (!IsPostBack) {
SetFocus(txtUserID);
}
--또는
if (!IsPostBack) {
SetFocus(txtUserID.ClientID);
}
ASP.NET 2.0에서는 Webresource.axd 처리기(앞에서 설명)를 사용하여 포커스를 설정하는 클라이언트 쪽 함수를 렌더링합니다. 클라이언트 쪽 함수의 이름은 다음과 같이 WebForm_AutoFocus.
<script type="text/javascript"> <!-- WebForm_AutoFocus('txtUserID'); // --> </script>
또는 컨트롤에 Focus 메서드를 사용하여 초기 포커스를 해당 컨트롤로 설정할 수 있습니다. Focus 메서드는 Control 클래스에서 파생되며 모든 ASP.NET 2.0 컨트롤에서 사용할 수 있습니다. 유효성 검사 오류가 발생할 때 포커스를 특정 컨트롤로 설정할 수도 있습니다. 이 내용은 이후 모듈에서 다룹니다.
ASP.NET 2.0의 새 서버 컨트롤
다음은 ASP.NET 2.0의 새 서버 컨트롤입니다. 그 중 일부에 대한 자세한 내용은 이후 모듈에서 살펴보겠습니다.
ImageMap 컨트롤
ImageMap 컨트롤을 사용하면 게시물을 다시 시작하거나 URL로 이동할 수 있는 이미지에 핫스팟을 추가할 수 있습니다. 사용 가능한 핫스팟에는 세 가지 유형이 있습니다. CircleHotSpot, RectangleHotSpot 및 PolygonHotSpot. 핫스폿은 Visual Studio의 컬렉션 편집기를 통해 추가되거나 프로그래밍 방식으로 코드에 추가됩니다. 이미지에 핫스팟을 그리는 데 사용할 수 있는 사용자 인터페이스는 없습니다. 핫스팟의 좌표와 크기 또는 반경을 선언적으로 지정해야 합니다. 디자이너에는 핫스팟의 시각적 표현도 없습니다. 핫스팟이 URL로 이동하도록 구성된 경우 URL은 핫스팟의 NavigateUrl 속성을 통해 지정됩니다. 포스트 백 핫스팟의 경우 PostBackValue 속성을 사용하면 서버 쪽 코드에서 검색할 수 있는 문자열을 포스트백에 전달할 수 있습니다.
그림 1: Visual Studio의 핫스팟 컬렉션 편집기
BulletedList 컨트롤
BulletedList 컨트롤은 데이터를 쉽게 바인딩할 수 있는 글머리 기호 목록입니다. 목록은 BulletStyle 속성을 통해 정렬(번호 매기기) 또는 순서를 지정할 수 있습니다. 목록의 각 항목은 ListItem 개체로 표시됩니다.
그림 2: Visual Studio의 BulletedList 컨트롤
HiddenField 컨트롤
HiddenField 컨트롤은 숨겨진 양식 필드를 페이지에 추가하며, 값은 서버 쪽 코드에서 사용할 수 있습니다. 숨겨진 양식 필드의 값은 일반적으로 포스트 백 간에 변경되지 않은 상태로 유지됩니다. 그러나 악의적인 사용자가 다시 게시하기 전에 값을 변경할 수 있습니다. 이 경우 HiddenField 컨트롤은 ValueChanged 이벤트를 발생합니다. HiddenField 컨트롤에 중요한 정보가 있고 변경되지 않은 상태로 유지하려면 코드에서 ValueChanged 이벤트를 처리해야 합니다.
FileUpload 컨트롤
ASP.NET 2.0의 FileUpload 컨트롤을 사용하면 ASP.NET 페이지를 통해 웹 서버에 파일을 업로드할 수 있습니다. 이 컨트롤은 몇 가지 예외가 있는 ASP.NET 1.x HtmlInputFile 클래스와 매우 유사합니다. ASP.NET 1.x에서는 좋은 파일이 있는지 확인하기 위해 PostedFile 속성을 null로 확인하는 것이 좋습니다. ASP.NET 2.0의 FileUpload 컨트롤은 동일한 용도로 사용할 수 있는 새 HasFile 속성을 추가하며 좀 더 효율적입니다.
PostedFile 속성은 여전히 HttpPostedFile 개체에 액세스할 수 있지만, 이제 HttpPostedFile의 일부 기능을 FileUpload 컨트롤에서 기본적으로 사용할 수 있습니다. 예를 들어 업로드된 파일을 ASP.NET 1.x에 저장하려면 HttpPostedFile 개체에서 SaveAs 메서드를 호출합니다. ASP.NET 2.0에서 FileUpload 컨트롤을 사용하여 FileUpload 컨트롤 자체에서 SaveAs 메서드를 호출합니다.
2.0 동작의 또 다른 중요한 변경 사항(그리고 가장 중요한 변경 사항)은 업로드된 전체 파일을 저장하기 전에 더 이상 메모리에 로드할 필요가 없다는 것입니다. 1.x에서 업로드된 모든 파일은 디스크에 기록되기 전에 메모리에 완전히 저장됩니다. 이 아키텍처는 대용량 파일의 업로드를 방지합니다.
ASP.NET 2.0에서 httpRuntime 요소의 requestLengthDiskThreshold 특성을 사용하면 디스크에 기록되기 전에 메모리의 버퍼에 보관되는 킬로바이트 수를 구성할 수 있습니다.
중요: MSDN 설명서(및 다른 설명서)는 이 값이 바이트(킬로바이트 아님)이고 기본값이 256임을 지정합니다. 값은 실제로 킬로바이트 단위로 지정되고 기본값은 80입니다. 기본값이 80K이면 버퍼가 큰 개체 힙에서 끝나지 않도록 합니다.
마법사 컨트롤
패널을 사용하거나 페이지에서 페이지로 전송하여 일련의 "페이지"에서 정보를 수집하려고 시도하는 데 어려움을 겪는 ASP.NET 개발자를 만나는 것은 매우 일반적입니다. 더 자주는 아니지만, 노력은 좌절하고 시간이 많이 걸립니다. 새 마법사 컨트롤은 사용자가 익숙한 마법사 인터페이스에서 선형 및 비선형 단계를 허용하여 문제를 해결합니다. 마법사 컨트롤은 일련의 단계에서 입력 양식을 제공합니다. 각 단계는 컨트롤의 StepType 속성에 지정된 특정 형식입니다. 사용 가능한 단계 유형은 다음과 같습니다.
단계 유형 | 설명 |
---|---|
자동 | 마법사는 단계 계층 내의 위치에 따라 단계 유형을 자동으로 결정합니다. |
시작 | 소개 문을 제시하는 데 자주 사용되는 첫 번째 단계입니다. |
단계 | 일반적인 단계입니다. |
Finish | 마법사를 완료하는 단추를 표시하는 데 일반적으로 사용되는 마지막 단계입니다. |
완료 | 성공 또는 실패를 전달하는 메시지를 표시합니다. |
참고
마법사 컨트롤은 ASP.NET 제어 상태를 사용하여 상태를 추적합니다. 따라서 EnableViewState 속성은 아무런 손해 없이 false로 설정할 수 있습니다.
이 비디오는 마법사 컨트롤의 연습입니다.
컨트롤 지역화
Localize 컨트롤은 리터럴 컨트롤과 비슷합니다. 그러나 Localize 컨트롤에는 추가된 태그가 렌더링되는 방법을 제어하는 Mode 속성이 있습니다. Mode 속성은 다음 값을 지원합니다.
모드 | 설명 |
---|---|
변환 | 태그는 요청을 만드는 브라우저의 프로토콜에 따라 변환됩니다. |
PassThrough | 태그는 있는 그대로 렌더링됩니다. |
인코딩 | 컨트롤에 추가된 태그는 HtmlEncode를 사용하여 인코딩됩니다. |
MultiView 및 보기 컨트롤
MultiView 컨트롤은 보기 컨트롤의 컨테이너 역할을 하고 보기 컨트롤은 다른 컨트롤에 대한 컨테이너(패널 컨트롤과 유사)로 작동합니다. MultiView 컨트롤의 각 보기는 단일 보기 컨트롤로 표시됩니다. MultiView의 첫 번째 보기 컨트롤은 보기 0이고 두 번째 컨트롤은 보기 1 등입니다. MultiView 컨트롤의 ActiveViewIndex를 지정하여 보기를 전환할 수 있습니다.
대체 컨트롤
대체 컨트롤은 ASP.NET 캐싱과 함께 사용됩니다. 캐싱을 활용하려고 하지만 각 요청에서 업데이트해야 하는 페이지의 일부(즉, 캐싱에서 제외되는 페이지의 일부)가 있는 경우 대체 구성 요소는 훌륭한 솔루션을 제공합니다. 컨트롤은 실제로 자체 출력을 렌더링하지 않습니다. 대신 서버 쪽 코드의 메서드에 바인딩됩니다. 페이지가 요청되면 메서드가 호출되고 대체 컨트롤 대신 반환된 태그가 렌더링됩니다.
대체 컨트롤이 바인딩되는 메서드는 MethodName 속성을 통해 지정됩니다. 해당 메서드는 다음 조건을 충족해야 합니다.
- 정적(VB에서 공유) 메서드여야 합니다.
- HttpContext 형식의 매개 변수 하나를 허용합니다.
- 페이지의 컨트롤을 대체해야 하는 태그를 나타내는 문자열을 반환합니다.
대체 컨트롤은 페이지에서 다른 컨트롤을 수정할 수 없지만 해당 매개 변수를 통해 현재 HttpContext에 액세스할 수 있습니다.
GridView 컨트롤
GridView 컨트롤은 DataGrid 컨트롤을 대체합니다. 이 컨트롤은 이후 모듈에서 자세히 설명합니다.
DetailsView 컨트롤
DetailsView 컨트롤을 사용하면 데이터 원본에서 단일 레코드를 표시하고 편집하거나 삭제할 수 있습니다. 이후 모듈에서 자세히 설명합니다.
FormView 컨트롤
FormView 컨트롤은 구성 가능한 인터페이스의 데이터 원본에서 단일 레코드를 표시하는 데 사용됩니다. 이후 모듈에서 자세히 설명합니다.
AccessDataSource 컨트롤
AccessDataSource 컨트롤은 Access 데이터베이스를 데이터 바인딩하는 데 사용됩니다. 이후 모듈에서 자세히 설명합니다.
ObjectDataSource 컨트롤
ObjectDataSource 컨트롤은 컨트롤이 데이터 원본에 직접 바인딩되는 2계층 모델이 아닌 중간 계층 비즈니스 개체에 데이터를 바인딩할 수 있도록 3계층 아키텍처를 지원하는 데 사용됩니다. 이후 모듈에서 자세히 설명합니다.
XmlDataSource 컨트롤
XmlDataSource 컨트롤은 XML 데이터 원본에 데이터를 바인딩하는 데 사용됩니다. 이후 모듈에서 자세히 설명합니다.
SiteMapDataSource 컨트롤
SiteMapDataSource 컨트롤은 사이트 맵을 기반으로 하는 사이트 탐색 컨트롤에 대한 데이터 바인딩을 제공합니다. 이후 모듈에서 자세히 설명합니다.
SiteMapPath 컨트롤
SiteMapPath 컨트롤은 일반적으로 이동 경로라고 하는 일련의 탐색 링크를 표시합니다. 이후 모듈에서 자세히 설명합니다.
Menu 컨트롤
메뉴 컨트롤은 DHTML을 사용하여 동적 메뉴를 표시합니다. 이후 모듈에서 자세히 설명합니다.
TreeView 컨트롤
TreeView 컨트롤은 데이터의 계층적 트리 뷰를 표시하는 데 사용됩니다. 이후 모듈에서 자세히 설명합니다.
로그인 컨트롤
로그인 컨트롤은 웹 사이트에 로그인하는 메커니즘을 제공합니다. 이후 모듈에서 자세히 설명합니다.
LoginView 컨트롤
LoginView 컨트롤을 사용하면 사용자의 로그인 상태 따라 다양한 템플릿을 표시할 수 있습니다. 이후 모듈에서 자세히 설명합니다.
PasswordRecovery 컨트롤
PasswordRecovery 컨트롤은 ASP.NET 애플리케이션의 사용자가 잊어버린 암호를 검색하는 데 사용됩니다. 이후 모듈에서 자세히 설명합니다.
LoginStatus
LoginStatus 컨트롤은 사용자의 로그인 상태 표시합니다. 이후 모듈에서 자세히 설명합니다.
LoginName
LoginName 컨트롤은 ASP.NET 애플리케이션에 로그인한 후 사용자의 사용자 이름을 표시합니다. 이후 모듈에서 자세히 설명합니다.
CreateUserWizard
CreateUserWizard는 사용자에게 ASP.NET 애플리케이션에서 사용할 ASP.NET 멤버 자격 계정을 만들 수 있는 기능을 제공하는 구성 가능한 마법사입니다. 이후 모듈에서 자세히 설명합니다.
ChangePassword
ChangePassword 컨트롤을 사용하면 사용자가 ASP.NET 애플리케이션에 대한 암호를 변경할 수 있습니다. 이후 모듈에서 자세히 설명합니다.
다양한 WebParts
ASP.NET 2.0은 다양한 웹 파트와 함께 배송됩니다. 이러한 내용은 이후 모듈에서 자세히 설명합니다.