ASP.NET Dynamic Data 필드 템플릿 개요
업데이트: 2007년 11월
ASP.NET Dynamic Data 필드 템플릿은 데이터 컨트롤을 데이터 모델의 데이터 형식에 매핑하는 ASP.NET 사용자 정의 컨트롤입니다. 필드 템플릿은 데이터 모델의 데이터 필드, 데이터 열 및 메타데이터에 대한 액세스를 지원하는 FieldTemplateUserControl 클래스에서 파생됩니다. Dynamic Data 프로젝트는 몇 가지 기본 필드 템플릿을 기본적으로 제공하지만 기본 템플릿을 수정하거나 사용자 지정 템플릿을 만들어 사용할 수도 있습니다. 이 개요에서는 다음 항목에 대해 설명합니다.
기능
배경
기본 필드 템플릿
필드 템플릿 사용
필드 템플릿이 렌더링되는 방식
기능
Dynamic Data는 필드 템플릿을 사용하여 데이터 모델의 개별 데이터 필드를 렌더링합니다.
Dynamic Data를 사용하면 다음 작업을 수행할 수 있습니다.
기본 필드 템플릿을 수정합니다.
사용자 지정 필드 템플릿을 만듭니다.
배경
Dynamic Data는 데이터 기반 웹 응용 프로그램을 지원합니다. ASP.NET 데이터 소스 컨트롤이나 GridView 및 ListView 컨트롤 같은 기존 데이터 컨트롤을 사용한 데이터 액세스에 비해 Dynamic Data를 사용하면 코드 사용량이 대폭 줄어듭니다. 예를 들어 Northwind 데이터베이스의 Products 테이블은 Categories 및 Suppliers 테이블에 외래 키를 가지고 있습니다. 이와 같은 관계를 GridView나 ListView 컨트롤을 사용해 표시하려면 데이터베이스 스키마에 대해 잘 알고 있어야 하고 컨트롤을 직접 구성해야 할 뿐만 아니라 이로 인해 코드 작성 작업이 필요할 수도 있습니다.
그러나 Dynamic Data는 데이터베이스 스키마를 읽음으로써 데이터 형식 및 외래 키에 대한 정보를 가져올 수 있습니다. Dynamic Data는 간편하게 데이터에 액세스하고 조작할 수 있도록 구성된 데이터베이스 스키마를 인식하는 ASP.NET 데이터 컨트롤을 제공합니다. GridView 및 DetailsView 컨트롤의 기본 렌더링을 바꾸려면 각 페이지에서 렌더링 코드를 직접 제공해야 합니다. 필드 템플릿을 사용하면 GridView 및 DetailsView 컨트롤의 기본 렌더링을 전체적으로 변경하는 작업을 손쉽게 할 수 있습니다.
필드 템플릿은 Dynamic Data 컨트롤에서 개별 데이터 필드를 표시하는 데 사용됩니다. Dynamic Data는 기본 필드 템플릿을 사용하여 데이터 표시 및 편집을 위한 기본 렌더링을 만듭니다. 관리자는 기본 필드 템플릿을 사용자 지정하거나 새 필드 템플릿을 만들 수 있습니다.
예를 들어 Northwind 데이터베이스의 Products 테이블에 필드 템플릿을 사용하면 범주 ID 대신 범주 이름을 표시할 수 있고 편집 모드의 드롭다운 목록 상자를 제공할 수 있으며 관련 데이터를 보여 주는 세부 사항 페이지 같은 다른 페이지로 연결할 수 있습니다.
데이터베이스 스키마를 인식하는 서식 있는 데이터 컨트롤을 만드는 방법에 대한 자세한 내용은 ASP.NET 데이터 바인딩된 컨트롤에 동적 동작 추가를 참조하십시오.
필드 템플릿을 사용하는 Dynamic Data 컨트롤
필드 템플릿을 사용해 데이터 형식을 기반으로 데이터를 자동으로 렌더링하는 Dynamic Data 컨트롤은 다음과 같습니다.
DynamicControl - FormView 및 ListView와 데이터 모델의 데이터 표시 및 편집을 위해 템플릿 사용을 지원하는 GridView 및 DetailsView 같은 컨트롤에 사용됩니다. 이 컨트롤을 사용하면 데이터 열에서 템플릿을 사용할 수 있습니다. 자세한 내용은 방법: 데이터 바인딩된 템플릿 컨트롤에 ASP.NET Dynamic Data 사용을 참조하십시오.
ForeignKey.ascx - 외래 키 열을 표시하는 데 사용되는 기본 필드 템플릿입니다. DynamicField 및 DynamicControl 개체를 통해 href을 노출하고 액세스할 수 있습니다.
Children.ascx - 외래 키 열을 표시하는 데 사용되는 기본 필드 템플릿입니다. DynamicField 및 DynamicControl을 통해 href 및 AllowNavigation 속성을 설정할 수 있습니다.
DynamicField - DynamicField는 DataControlField이지만 여기에서 언급하는 이유는 데이터를 표시 및 편집하고 유효성 검사 논리를 데이터 모델에 추가하기 위해 GridView 및 DetailsView 데이터 컨트롤에 사용되기 때문입니다. 자세한 내용은 방법: DynamicField를 사용하여 데이터 바인딩된 컨트롤에 동적 동작 추가를 참조하십시오.
기본 필드 템플릿
기본 필드 템플릿은 Dynamic Data 웹 응용 프로그램에 기본적으로 제공되는 필드 템플릿입니다. 기본 필드 템플릿의 예는 다음과 같습니다.
ForeignKey.ascx - 다대일 관계가 있는 필드를 표시합니다.
ForeignKey_Edit.ascx - 다대일 관계가 있는 필드를 편집하는 데 사용됩니다.
DateTime.ascx - DateTime 데이터 형식을 텍스트로 표시합니다.
Dynamic Data는 Boolean, Decimal, integer, text 등의 데이터 형식을 렌더링하는 기본 필드 템플릿을 제공합니다.
기본 필드 템플릿에 대한 자세한 내용은 ASP.NET Dynamic Data 기본 필드 템플릿을 참조하십시오.
필드 템플릿 사용
데이터베이스에서 값을 가져와서 표시하고 IBindableControl.ExtractValues 메서드를 사용하여 값을 가져오고 DataControl 컨트롤에 대한 액세스를 제공하여 필드 템플릿을 구현할 수 있습니다.
Dynamic Data를 사용하면 기본 필드 템플릿을 사용자 지정하거나 새 필드 템플릿을 만들 수 있습니다. 기본 필드 템플릿을 사용자 지정하면 Dynamic Data는 사용자 지정된 기본 필드 템플릿을 사용합니다.
기본 필드 템플릿의 데이터 표시 방법 사용자 지정
기본 필드 템플릿은 데이터 모델의 데이터 형식에 매핑되는 ASP.NET 사용자 정의 컨트롤입니다. 이러한 컨트롤은 데이터 필드, 데이터베이스 열, 메타데이터 등에 대한 액세스를 지원하는 FieldTemplateUserControl 클래스에서 파생됩니다.
기본 필드 템플릿을 수정하여 데이터 컨트롤의 데이터 렌더링 방법을 변경할 수 있습니다. 예를 들어 기본 필드 템플릿을 사용하는 데이터 컨트롤에 표시되는 텍스트의 배경색 및 전경색을 변경할 수 있습니다. 자세한 내용은 방법: ASP.NET Dynamic Data 기본 필드 템플릿 사용자 지정을 참조하십시오.
사용자 지정 필드 템플릿 만들기
사용자 지정 필드 템플릿을 만들 수도 있습니다. 이렇게 하려면 FieldTemplateUserControl 클래스에서 파생되는 ASP.NET 사용자 정의 컨트롤을 만듭니다. 방금 만든 새 컨트롤에 데이터 필드를 매핑하는 UIHint 속성을 추가하여 기본 필드 템플릿 대신 사용되도록 합니다.
사용자 지정 필드 템플릿을 만드는 방법에 대한 자세한 내용은 방법: 데이터 모델의 데이터 필드 표시 사용자 지정을 참조하십시오. UIHint 속성을 사용하는 방법에 대한 자세한 내용은 방법: Dynamic Data 컨트롤의 데이터 필드 모양 및 동작 사용자 지정을 참조하십시오.
필드 템플릿이 렌더링되는 방식
Dynamic Data는 기본 필드 템플릿 및 사용자 지정 필드 템플릿을 디스플레이, 편집 및 삽입 모드로 렌더링합니다. Dynamic Data는 조회 규칙을 사용하여 렌더링할 필드 템플릿을 확인합니다. Dynamic Data가 사용하는 조회 규칙은 컨트롤이 디스플레이, 편집 또는 삽입 모드 중 어떤 모드에 있는지 여부에 따라 다릅니다. 예를 들어 열 데이터가 부울 값이고 데이터 컨트롤이 디스플레이 모드에 있으면 Dynamic Data는 Boolean 데이터 형식을 표시하는 기본 필드 템플릿인 Boolean.ascx를 렌더링합니다. 그러나 데이터 컨트롤이 편집 모드에 있으면 Dynamic Data는 Boolean 데이터 형식의 편집을 지원하는 필드 템플릿인 Boolean_Edit.ascx를 렌더링하고 데이터 컨트롤이 삽입 모드에 있으면 사용자의 Boolean 데이터 형식 입력을 지원하는 필드 템플릿인 Boolean_Insert.ascx를 렌더링합니다.
데이터 모델의 데이터 필드에 UIHint 특성이 연결되어 있는 경우, 즉 사용자 지정 필드 템플릿이 지정되어 있으면 Dynamic Data는 UIHint 이름을 기준으로 컨트롤을 찾습니다. 예를 들어 UIHint 특성에 MyTemplate이 지정되어 있으면 Dynamic Data는 MyTemplate.ascx, MyTemplate_Edit.ascx(컨트롤이 편집 모드에 있는 경우) 또는 MyTemplate_Insert.ascx(컨트롤이 삽입 모드에 있는 경우)라는 필드 템플릿을 찾습니다. 이러한 컨트롤이 없으면 Dynamic Data는 기본적으로 기본 필드 템플릿을 사용합니다.
조회 규칙
Dynamic Data는 먼저 필드 템플릿의 모드를 확인한 후 조회를 시작합니다. 각 모드에서 Dynamic Data는 일련의 조회 규칙을 적용합니다.
디스플레이 모드 조회
다음은 디스플레이 모드에서 Dynamic Data가 필드 템플릿을 렌더링하는 데 사용하는 조회 규칙에 대한 설명입니다.
UIHint 메타데이터가 있는 경우, 즉 사용자 지정 필드 템플릿이 있으면 Dynamic Data가 사용자 정의 컨트롤의 이름과 UIHint 및 DataTypeAttribute 속성에 정의된 DataTypeAttribute를 기준으로 컨트롤을 찾습니다. Dynamic Data는 기본적으로 모든 데이터 형식을 표시하지는 않습니다. 예를 들어 binary, timestamp, image 등의 Byte[] 데이터 형식은 기본적으로 렌더링되지 않습니다. Dynamic Data가 기본적으로 표시하는 데이터 형식에 대한 자세한 내용은 ASP.NET Dynamic Data 기본 필드 템플릿을 참조하십시오. 사용자 지정 데이터 형식을 표시하는 방법에 대한 자세한 내용은 DataTypeAttribute를 참조하십시오.
Dynamic Data는 데이터베이스의 열에서 데이터 형식을 확인한 후 해당 데이터 형식을 기준으로 컨트롤을 찾습니다. 데이터 형식 이름을 확인하고 사용하는 순서는 다음과 같습니다.
전체 데이터 형식 이름(예: System.Int32)을 찾습니다.
전체 데이터 형식 이름을 찾지 못한 경우 Dynamic Data는 단순 데이터 형식 이름(예: int32)을 찾습니다.
단순 데이터 형식 이름을 찾지 못하면 데이터 테이블에 정의된 특별한 사례를 찾습니다. 예를 들어 Int32와 같은 단순 데이터 형식을 찾지 못하면 Dynamic Data는 데이터 테이블에 정의된 특별한 사례인 Integer를 찾습니다. 단순 데이터 형식 String을 찾지 못하면 String에 대한 특별한 사례인 Text를 찾습니다.
특별한 사례가 없고 대체(fallback) 데이터 형식이 있으면 대체 데이터 형식을 찾습니다. Dynamic Data는 대체 데이터 형식을 사용하여 조회를 처음부터 수행합니다.
대체 데이터 형식이 없으면 Dynamic Data는 데이터를 표시하지 않습니다.
필드가 외래 키 필드이면 Dynamic Data는 다대일 관계용 기본 필드 템플릿인 ForeignKey.ascx 또는 일대다 관계용 기본 필드 템플릿인 Children.ascx를 렌더링합니다.
필드 템플릿 컨트롤이 없으면 Dynamic Data는 필드 템플릿을 찾을 수 없으므로 데이터를 표시할 수 없음을 나타내는 오류 메시지를 표시합니다.
편집 모드 조회
편집 모드 조회 규칙은 다음과 같은 예외 사항을 제외하고는 디스플레이 모드 조회 규칙과 같습니다. 필드 템플릿이 편집 모드에 있으면 Dynamic Data는 "_Edit" 필드 템플릿(예: MyTemplate_Edit)을 찾아서 규칙을 적용하고, 편집 모드에 있지 않으면 기본 모드인 디스플레이(읽기 전용) 모드를 사용합니다.
삽입 모드 조회
삽입 모드 조회 규칙은 다음과 같은 예외 사항을 제외하고는 디스플레이 모드 조회 규칙과 같습니다. 필드 템플릿이 삽입 모드에 있으면 Dynamic Data는 _Insert 필드 템플릿(예: MyTemplate_Insert)을 찾아서 규칙을 적용하고, 삽입 모드에 있지 않으면 _Edit 필드 템플릿을 찾습니다.
참고: |
---|
"_Insert.ascx" 사용자 정의 컨트롤은 기본적으로 제공되지 않습니다. |
대체 데이터 형식 |
데이터 형식 |
---|---|
Decimal |
Float, Double |
Int |
Int16, byte, Long |
String |
Char, Int, Decimal, GUID, DateTime, DateTimeOffset, TimeSpan |
클래스 참조
클래스 |
설명 |
---|---|
모든 FieldTemplateUser 컨트롤의 기본 클래스 |