다음을 통해 공유


Entity Framework 4.0 Database First 및 ASP.NET 4 Web Forms 시작 - 8부

작성자: Tom Dykstra

Contoso University 샘플 웹 애플리케이션은 Entity Framework 4.0 및 Visual Studio 2010을 사용하여 ASP.NET Web Forms 애플리케이션을 만드는 방법을 보여 줍니다. 자습서 시리즈에 대한 자세한 내용은 시리즈의 첫 번째 자습서를 참조 하세요.

동적 데이터 기능을 사용하여 데이터 서식 지정 및 유효성 검사

이전 자습서에서는 저장 프로시저를 구현했습니다. 이 자습서에서는 동적 데이터 기능이 다음과 같은 이점을 제공하는 방법을 보여줍니다.

  • 필드는 데이터 형식에 따라 표시할 수 있도록 자동으로 서식이 지정됩니다.
  • 필드는 데이터 형식에 따라 자동으로 유효성이 검사됩니다.
  • 데이터 모델에 메타데이터를 추가하여 서식 및 유효성 검사 동작을 사용자 지정할 수 있습니다. 이렇게 하면 한 곳에서만 서식 및 유효성 검사 규칙을 추가할 수 있으며 동적 데이터 컨트롤을 사용하여 필드에 액세스하는 모든 곳에서 자동으로 적용됩니다.

어떻게 작동하는지 확인하려면 기존 Students.aspx 페이지에서 필드를 표시하고 편집하는 데 사용하는 컨트롤을 변경하고 엔터티 형식의 이름 및 날짜 필드에 Student 서식 및 유효성 검사 메타데이터를 추가합니다.

Image01

DynamicField 및 DynamicControl 컨트롤 사용

Students.aspx 페이지를 열고 컨트롤에서 StudentsGridView 이름등록 날짜 TemplateField 요소를 다음 태그로 바꿉다.

<asp:TemplateField HeaderText="Name" SortExpression="LastName">
                <EditItemTemplate>
                    <asp:DynamicControl ID="LastNameTextBox" runat="server" DataField="LastName" Mode="Edit" />
                    <asp:DynamicControl ID="FirstNameTextBox" runat="server" DataField="FirstMidName" Mode="Edit" />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:DynamicControl ID="LastNameLabel" runat="server" DataField="LastName" Mode="ReadOnly" />,
                    <asp:DynamicControl ID="FirstNameLabel" runat="server" DataField="FirstMidName" Mode="ReadOnly" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:DynamicField DataField="EnrollmentDate" HeaderText="Enrollment Date" SortExpression="EnrollmentDate" />

이 태그는 학생 이름 템플릿 필드 대신 TextBox 컨트롤과 Label 컨트롤을 사용 DynamicControl 하며 등록 날짜에 대한 컨트롤을 DynamicField 사용합니다. 형식 문자열이 지정되지 않았습니다.

컨트롤 뒤의 ValidationSummary 컨트롤을 추가합니다 StudentsGridView .

<asp:ValidationSummary ID="StudentsValidationSummary" runat="server" ShowSummary="true"
        DisplayMode="BulletList" Style="color: Red" />

컨트롤에서 SearchGridView 요소 생략을 제외하고 컨트롤에서와 같이 이름등록 날짜 열에 StudentsGridView 대한 태그를 EditItemTemplate 바꿉니다. Columns 이제 컨트롤의 요소에 SearchGridView 다음 태그가 포함됩니다.

<asp:TemplateField HeaderText="Name" SortExpression="LastName">
                <ItemTemplate>
                    <asp:DynamicControl ID="LastNameLabel" runat="server" DataField="LastName" Mode="ReadOnly" />,
                    <asp:DynamicControl ID="FirstNameLabel" runat="server" DataField="FirstMidName" Mode="ReadOnly" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:DynamicField DataField="EnrollmentDate" HeaderText="Enrollment Date" SortExpression="EnrollmentDate" />

Students.aspx.cs 열고 다음 문을 추가합니다.using

using ContosoUniversity.DAL;

페이지 Init 이벤트에 대한 처리기를 추가합니다.

protected void Page_Init(object sender, EventArgs e)
{
    StudentsGridView.EnableDynamicData(typeof(Student));
    SearchGridView.EnableDynamicData(typeof(Student));
}

이 코드는 동적 데이터가 엔터티 필드에 Student 대해 이러한 데이터 바인딩된 컨트롤에 서식 및 유효성 검사를 제공하도록 지정합니다. 페이지를 실행할 때 다음 예제와 같은 오류 메시지가 표시되면 일반적으로 다음에서 Page_Init메서드를 호출 EnableDynamicData 하는 것을 잊어버렸습니다.

Could not determine a MetaTable. A MetaTable could not be determined for the data source 'StudentsEntityDataSource' and one could not be inferred from the request URL.

페이지를 실행합니다.

Image03

등록 날짜 열에서 속성 형식DateTime이 이므로 날짜와 함께 시간이 표시됩니다. 나중에 이 문제를 해결합니다.

지금은 동적 데이터가 자동으로 기본 데이터 유효성 검사를 제공하는지 확인합니다. 예를 들어 편집을 클릭하고 날짜 필드를 지우고 업데이트를 클릭하면 데이터 모델에서 값이 null을 허용하지 않으므로 동적 데이터가 자동으로 필수 필드가 됩니다. 페이지에는 필드 뒤의 별표와 컨트롤의 ValidationSummary 오류 메시지가 표시됩니다.

Image05

별표 위에 마우스 포인터를 ValidationSummary 놓아 오류 메시지를 볼 수도 있으므로 컨트롤을 생략할 수 있습니다.

Image06

동적 데이터는 등록 날짜 필드에 입력한 데이터가 유효한 날짜인지도 확인합니다.

Image04

여기서 볼 수 있듯이 일반적인 오류 메시지입니다. 다음 섹션에서는 유효성 검사 및 서식 규칙뿐만 아니라 메시지를 사용자 지정하는 방법을 알아보세요.

데이터 모델에 메타데이터 추가

일반적으로 동적 데이터에서 제공하는 기능을 사용자 지정하려고 합니다. 예를 들어 데이터가 표시되는 방식과 오류 메시지의 내용을 변경할 수 있습니다. 일반적으로 데이터 유효성 검사 규칙을 사용자 지정하여 데이터 형식에 따라 동적 데이터가 자동으로 제공하는 것보다 더 많은 기능을 제공합니다. 이렇게 하려면 엔터티 형식에 해당하는 부분 클래스를 만듭니다.

솔루션 탐색기 ContosoUniversity 프로젝트를 마우스 오른쪽 단추로 클릭하고 참조 추가를 선택한 다음 참조를 추가합니다System.ComponentModel.DataAnnotations.

Image11

DAL 폴더에서 새 클래스 파일을 만들고, Student.cs 이름을 지정하고, 템플릿 코드를 다음 코드로 바꿉다.

using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace ContosoUniversity.DAL
{
    [MetadataType(typeof(StudentMetadata))]
    public partial class Student
    {
    }

    public class StudentMetadata
    {
        [DisplayFormat(DataFormatString="{0:d}", ApplyFormatInEditMode=true)]
        public DateTime EnrollmentDate { get; set; }

        [StringLength(25, ErrorMessage = "First name must be 25 characters or less in length.")]
        [Required(ErrorMessage="First name is required.")]
        public String FirstMidName { get; set; }

        [StringLength(25, ErrorMessage = "Last name must be 25 characters or less in length.")]
        [Required(ErrorMessage = "Last name is required.")]
        public String LastName { get; set; }
    }
}

이 코드는 엔터티에 대한 부분 클래스를 Student 만듭니다. 이 partial 클래스에 적용된 특성은 MetadataType 메타데이터를 지정하는 데 사용하는 클래스를 식별합니다. 메타데이터 클래스는 어떤 이름도 가질 수 있지만 엔터티 이름과 "메타데이터"를 사용하는 것이 일반적입니다.

메타데이터 클래스의 속성에 적용되는 특성은 서식, 유효성 검사, 규칙 및 오류 메시지를 지정합니다. 여기에 표시된 특성은 다음과 같은 결과를 갖습니다.

  • EnrollmentDate 는 시간 없이 날짜로 표시됩니다.
  • 두 이름 필드 모두 길이가 25자 이하여야 하며 사용자 지정 오류 메시지가 제공됩니다.
  • 두 이름 필드가 모두 필요하며 사용자 지정 오류 메시지가 제공됩니다.

Students.aspx 페이지를 다시 실행하면 날짜가 시간 없이 표시됩니다.

Image08

행을 편집하고 이름 필드의 값을 지우려고 합니다. 필드를 나가자마자 업데이트를 클릭하기 전에 필드 오류를 나타내는 별표가 나타납니다. 업데이트를 클릭하면 지정한 오류 메시지 텍스트가 페이지에 표시됩니다.

Image10

25자보다 긴 이름을 입력하고 업데이트를 클릭하면 지정한 오류 메시지 텍스트가 페이지에 표시됩니다.

Image09

데이터 모델 메타데이터에서 이러한 서식 지정 및 유효성 검사 규칙을 설정했으므로 사용 DynamicControl 하거나 DynamicField 제어하는 한 이러한 필드를 표시하거나 변경할 수 있는 모든 페이지에 규칙이 자동으로 적용됩니다. 이렇게 하면 작성해야 하는 중복 코드의 양이 줄어들어 프로그래밍 및 테스트가 더 쉬워지고 애플리케이션 전체에서 데이터 형식 지정 및 유효성 검사가 일관됩니다.

추가 정보

이 자습서는 Entity Framework 시작에 대한 일련의 자습서를 마무리합니다. Entity Framework를 사용하는 방법을 알아보는 데 도움이 되는 추가 리소스를 보려면 다음 Entity Framework 자습서 시리즈의 첫 번째 자습서를 계속 진행하거나 다음 사이트를 방문하세요.