편집 및 삽입 인터페이스에 유효성 검사 컨트롤 추가(VB)Adding Validation Controls to the Editing and Inserting Interfaces (VB)

Scott Mitchellby Scott Mitchell

샘플 앱 다운로드 또는 PDF 다운로드Download Sample App or Download PDF

이 자습서에서는 더 간단 하 게 사용자 인터페이스를 제공 하기 위해 데이터 웹 컨트롤의 EditItemTemplate 및 InsertItemTemplate에 유효성 검사 컨트롤을 추가 하는 것이 얼마나 쉬운지 알아봅니다.In this tutorial we'll see how easy it is to add validation controls to the EditItemTemplate and InsertItemTemplate of a data Web control, to provide a more foolproof user interface.

소개Introduction

지난 세 자습서에 대해 살펴본 예제에서 GridView 및 DetailsView 컨트롤은 모두 BoundFields 및 CheckBoxFields로 구성 되었습니다. GridView 또는 DetailsView을 데이터 소스에 바인딩할 때 Visual Studio에서 자동으로 추가 되는 필드 형식입니다. 스마트 태그를 통해 제어 합니다.The GridView and DetailsView controls in the examples we've explored over the past three tutorials have all been composed of BoundFields and CheckBoxFields (the field types automatically added by Visual Studio when binding a GridView or DetailsView to a data source control through the smart tag). GridView 또는 DetailsView의 행을 편집 하는 경우 읽기 전용이 아닌 BoundFields은 최종 사용자가 기존 데이터를 수정할 수 있는 텍스트 상자로 변환 됩니다.When editing a row in a GridView or DetailsView, those BoundFields that are not read-only are converted into textboxes, from which the end user can modify the existing data. 마찬가지로, DetailsView 컨트롤에 새 레코드를 삽입 하는 경우 InsertVisible 속성이 True (기본값)로 설정 된 해당 BoundFields는 사용자가 새 레코드의 필드 값을 제공할 수 있는 빈 텍스트 상자를 렌더링 합니다.Similarly, when inserting a new record into a DetailsView control, those BoundFields whose InsertVisible property is set to True (the default) are rendered as empty textboxes, into which the user can provide the new record's field values. 마찬가지로, 표준 읽기 전용 인터페이스에서 사용 하지 않도록 설정 된 CheckBoxFields는 편집 및 삽입 인터페이스의 사용 확인란으로 변환 됩니다.Likewise, CheckBoxFields, which are disabled in the standard, read-only interface, are converted into enabled checkboxes in the editing and inserting interfaces.

BoundField 및 CheckBoxField에 대 한 기본 편집 및 삽입 인터페이스는 유용할 수 있지만 인터페이스에는 어떤 종류의 유효성 검사가 없습니다.While the default editing and inserting interfaces for the BoundField and CheckBoxField can be helpful, the interface lacks any sort of validation. ProductName 필드를 생략 하거나 UnitsInStock (예:-50)에 대해 잘못 된 값을 입력 하는 경우와 같이 사용자가 실수로 데이터를 입력 하는 경우 응용 프로그램 아키텍처의 깊이에서 예외가 발생 합니다.If a user makes a data entry mistake - such as omitting the ProductName field or entering an invalid value for UnitsInStock (such as -50) an exception will be raised from within the depths of the application architecture. 이전 자습서에서 설명한 대로이 예외를 정상적으로 처리할 수 있지만 사용자 인터페이스를 편집 하거나 삽입 하는 것은 사용자가 첫 번째 위치의 잘못 된 데이터를 입력 하지 못하도록 하는 유효성 검사 컨트롤을 포함 하는 것이 가장 좋습니다.While this exception can be gracefully handled as demonstrated in the previous tutorial, ideally the editing or inserting user interface would include validation controls to prevent a user from entering such invalid data in the first place.

사용자 지정 된 편집 또는 삽입 인터페이스를 제공 하기 위해 BoundField 또는 CheckBoxField를 Templatefield로 변환로 바꾸어야 합니다.In order to provide a customized editing or inserting interface, we need to replace the BoundField or CheckBoxField with a TemplateField. GridView 컨트롤에서 서식 파일 필드를 사용 하 고 DetailsView 컨트롤 자습서에서 서식 파일 필드를 사용 하는 방법에 대 한 설명 항목에 해당 하는 서식 파일 필드는 서로 다른 행 상태에 대해 별도의 인터페이스를 정의 하는 여러 템플릿으로 구성할 수 있습니다.TemplateFields, which were the topic of discussion in the Using TemplateFields in the GridView Control and Using TemplateFields in the DetailsView Control tutorials, can consist of multiple templates defining separate interfaces for different row states. Templatefield로 변환의 ItemTemplate은 DetailsView 또는 GridView 컨트롤에서 읽기 전용 필드 또는 행을 렌더링할 때 사용 되는 반면 EditItemTemplateInsertItemTemplate는 각각 편집 및 삽입 모드에 사용할 인터페이스를 지정 합니다.The TemplateField's ItemTemplate is used to when rendering read-only fields or rows in the DetailsView or GridView controls, whereas the EditItemTemplate and InsertItemTemplate indicate the interfaces to use for the editing and inserting modes, respectively.

이 자습서에서는 Templatefield로 변환의 EditItemTemplate에 유효성 검사 컨트롤을 추가 하는 것이 얼마나 쉬운지 확인 하 고 InsertItemTemplate 하 여 보다 간단 하 게 사용자 인터페이스를 제공 합니다.In this tutorial we'll see how easy it is to add validation controls to the TemplateField's EditItemTemplate and InsertItemTemplate to provide a more foolproof user interface. 특히이 자습서에서는 삽입, 업데이트 및 삭제 자습서와 관련 된 이벤트를 검사 하 고 적절 한 유효성 검사를 포함 하는 편집 및 삽입 인터페이스를 보강 하 여 만든 예제를 사용 합니다.Specifically, this tutorial takes the example created in the Examining the Events Associated with Inserting, Updating, and Deleting tutorial and augments the editing and inserting interfaces to include appropriate validation.

1 단계:삽입, 업데이트 및 삭제와 관련 된 이벤트를 검사 하 여 예제를 복제 합니다.Step 1: Replicating the Example fromExamining the Events Associated with Inserting, Updating, and Deleting

삽입, 업데이트 및 삭제 자습서와 관련 된 이벤트를 검사 하는 중에는 편집 가능한 GridView에서 제품의 이름과 가격을 나열 하는 페이지를 만들었습니다.In the Examining the Events Associated with Inserting, Updating, and Deleting tutorial we created a page that listed the names and prices of the products in an editable GridView. 또한이 페이지에는 DefaultMode 속성이 Insert로 설정 된 DetailsView이 포함 되어 있으므로 항상 삽입 모드로 렌더링 됩니다.Additionally, the page included a DetailsView whose DefaultMode property was set to Insert, thereby always rendering in insert mode. 이 DetailsView에서 사용자는 새 제품의 이름과 가격을 입력 한 다음 삽입을 클릭 하 여 시스템에 추가할 수 있습니다 (그림 1 참조).From this DetailsView, the user could enter the name and price for a new product, click Insert, and have it added to the system (see Figure 1).

이전 예제를 사용자가 새 제품을 추가 하 고 기존 제품을 편집할 수 있습니다.The Previous Example Allows Users to Add New Products and Edit Existing Ones

그림 1: 이전 예제에서는 사용자가 새 제품을 추가 하 고 기존 제품을 편집할 수 있습니다 (전체 크기 이미지를 보려면 클릭).Figure 1: The Previous Example Allows Users to Add New Products and Edit Existing Ones (Click to view full-size image)

이 자습서의 목표는 DetailsView 및 GridView를 보강 하 여 유효성 검사 컨트롤을 제공 하는 것입니다.Our goal for this tutorial is to augment the DetailsView and GridView to provide validation controls. 특히 유효성 검사 논리는 다음과 같습니다.In particular, our validation logic will:

  • 제품을 삽입 하거나 편집할 때 이름을 제공 해야 합니다.Require that the name be provided when inserting or editing a product
  • 레코드를 삽입할 때 가격을 제공 해야 합니다. 레코드를 편집할 때 가격은 여전히 필요 하지만 이전 자습서에서 이미 존재 하는 GridView의 RowUpdating 이벤트 처리기에서 프로그래밍 방식 논리를 사용 합니다.Require that the price be provided when inserting a record; when editing a record, we will still require a price, but will use the programmatic logic in the GridView's RowUpdating event handler already present from the earlier tutorial
  • 가격에 대해 입력 한 값이 유효한 통화 형식 인지 확인 합니다.Ensure that the value entered for the price is a valid currency format

이전 예제를 확대 하 여 유효성 검사를 포함 하는 것을 살펴보기 전에 먼저 DataModificationEvents.aspx 페이지의 예제를이 자습서의 페이지 (UIValidation.aspx)로 복제 해야 합니다.Before we can look at augmenting the previous example to include validation, we first need to replicate the example from the DataModificationEvents.aspx page to the page for this tutorial, UIValidation.aspx. 이를 수행 하려면 DataModificationEvents.aspx 페이지의 선언적 태그와 해당 소스 코드를 모두 복사 해야 합니다.To accomplish this we need to copy over both the DataModificationEvents.aspx page's declarative markup and its source code. 먼저 다음 단계를 수행 하 여 선언적 태그를 복사 합니다.First copy over the declarative markup by performing the following steps:

  1. Visual Studio에서 DataModificationEvents.aspx 페이지 열기Open the DataModificationEvents.aspx page in Visual Studio
  2. 페이지의 선언 태그 (페이지 맨 아래에 있는 원본 단추 클릭)로 이동 합니다.Go to the page's declarative markup (click on the Source button at the bottom of the page)
  3. 그림 2에 나와 있는 것 처럼 <asp:Content></asp:Content> 태그 (3 ~ 44 줄) 내에서 텍스트를 복사 합니다.Copy the text within the <asp:Content> and </asp:Content> tags (lines 3 through 44), as shown in Figure 2.

<asp: Content> 컨트롤 내에서 텍스트 복사 합니다.Copy the Text Within the <asp:Content> Control

그림 2: <asp:Content> 컨트롤 내에서 텍스트 복사 (전체 크기 이미지를 보려면 클릭)Figure 2: Copy the Text Within the <asp:Content> Control (Click to view full-size image)

  1. UIValidation.aspx 페이지 열기Open the UIValidation.aspx page
  2. 페이지의 선언적 태그로 이동Go to the page's declarative markup
  3. <asp:Content> 컨트롤 내에 텍스트를 붙여넣습니다.Paste the text within the <asp:Content> control.

소스 코드를 복사 하려면 DataModificationEvents.aspx.vb 페이지를 열고 EditInsertDelete_DataModificationEvents 클래스 내 에서만 텍스트를 복사 합니다.To copy over the source code, open the DataModificationEvents.aspx.vb page and copy just the text within the EditInsertDelete_DataModificationEvents class. 3 개의 이벤트 처리기 (Page_Load, GridView1_RowUpdatingObjectDataSource1_Inserting)를 복사 하지만 클래스 선언을 복사 하지 않습니다.Copy the three event handlers (Page_Load, GridView1_RowUpdating, and ObjectDataSource1_Inserting), but do not copy the class declaration. UIValidation.aspx.vbEditInsertDelete_UIValidation 클래스 에 복사 된 텍스트를 붙여넣습니다.Paste the copied text within the EditInsertDelete_UIValidation class in UIValidation.aspx.vb.

DataModificationEvents.aspx의 콘텐츠 및 코드를 UIValidation.aspx으로 이동한 후 잠시 브라우저에서 진행률을 테스트 합니다.After moving over the content and code from DataModificationEvents.aspx to UIValidation.aspx, take a moment to test out your progress in a browser. 이러한 두 페이지에서 동일한 출력이 표시 되 고 동일한 기능이 제공 됩니다 (작업 중인 DataModificationEvents.aspx의 스크린샷는 그림 1을 참조 하세요).You should see the same output and experience the same functionality in each of these two pages (refer back to Figure 1 for a screen shot of DataModificationEvents.aspx in action).

2 단계: BoundFields를 템플릿 필드로 변환Step 2: Converting the BoundFields Into TemplateFields

편집 및 삽입 인터페이스에 유효성 검사 컨트롤을 추가 하려면 DetailsView 및 GridView 컨트롤에서 사용 하는 BoundFields를 템플릿 필드로 변환 해야 합니다.To add validation controls to the editing and inserting interfaces, the BoundFields used by the DetailsView and GridView controls need to be converted into TemplateFields. 이를 위해서는 GridView 및 DetailsView의 스마트 태그에서 각각 열 편집 및 필드 편집 링크를 클릭 합니다.To achieve this, click on the Edit Columns and Edit Fields links in the GridView and DetailsView's smart tags, respectively. 여기에서 각 BoundFields을 선택 하 고 "이 필드를 Templatefield로 변환로 변환" 링크를 클릭 합니다.There, select each of the BoundFields and click the "Convert this field into a TemplateField" link.

각 DetailsView의 및 GridView의 BoundFields를 템플릿 필드로 변환 합니다.Convert Each of the DetailsView's and GridView's BoundFields Into TemplateFields

그림 3: 각 DetailsView의 BoundFields 및 GridView의 작업을 템플릿 필드로 변환 (전체 크기 이미지를 보려면 클릭)Figure 3: Convert Each of the DetailsView's and GridView's BoundFields Into TemplateFields (Click to view full-size image)

필드 대화 상자를 통해 BoundField을 Templatefield로 변환로 변환 하면 동일한 읽기 전용, 편집 및 삽입 인터페이스를 BoundField 자체와 같은 Templatefield로 변환 생성 합니다.Converting a BoundField into a TemplateField through the Fields dialog box generates a TemplateField that exhibits the same read-only, editing, and inserting interfaces as the BoundField itself. 다음 태그는 Templatefield로 변환로 변환 된 후 DetailsView의 ProductName 필드에 대 한 선언적 구문을 보여 줍니다.The following markup shows the declarative syntax for the ProductName field in the DetailsView after it has been converted into a TemplateField:

<asp:TemplateField HeaderText="ProductName" SortExpression="ProductName">
    <EditItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server"
         Text='<%# Bind("ProductName") %>'></asp:TextBox>
    </EditItemTemplate>
    <InsertItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server"
         Text='<%# Bind("ProductName") %>'></asp:TextBox>
    </InsertItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server"
         Text='<%# Bind("ProductName") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

이 Templatefield로 변환에는 EditItemTemplateInsertItemTemplate``ItemTemplate자동으로 생성 된 세 가지 템플릿이 있습니다.Note that this TemplateField had three templates automatically created ItemTemplate, EditItemTemplate, and InsertItemTemplate. ItemTemplate은 레이블 웹 컨트롤을 사용 하 여 단일 데이터 필드 값 (ProductName)을 표시 하는 반면 EditItemTemplateInsertItemTemplate는 데이터 필드 값을 양방향 데이터 바인딩을 사용 하 여 텍스트 상자의 Text 속성과 연결 하는 TextBox 웹 컨트롤의 데이터 필드 값을 표시 합니다.The ItemTemplate displays a single data field value (ProductName) using a Label Web control, while the EditItemTemplate and InsertItemTemplate present the data field value in a TextBox Web control that associates the data field with the TextBox's Text property using two-way databinding. 이 페이지에 삽입에 대 한 DetailsView만 사용 하 고 있기 때문에 ItemTemplate를 제거 하 고 두 개의 템플릿 필드에서 EditItemTemplate 수 있습니다. 단, 그대로 두면 됩니다.Since we are only using the DetailsView in this page for inserting, you may remove the ItemTemplate and EditItemTemplate from the two TemplateFields, although there's no harm in leaving them.

GridView는 DetailsView의 기본 제공 기능을 지원 하지 않으므로 GridView의 ProductName 필드를 Templatefield로 변환으로 변환 하면 ItemTemplateEditItemTemplate만 생성 됩니다.Since the GridView does not support the built-in inserting features of the DetailsView, converting the GridView's ProductName field into a TemplateField results in only an ItemTemplate and EditItemTemplate:

<asp:TemplateField HeaderText="ProductName" SortExpression="ProductName">
    <EditItemTemplate>
        <asp:TextBox ID="TextBox1" runat="server"
         Text='<%# Bind("ProductName") %>'></asp:TextBox>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server"
          Text='<%# Bind("ProductName") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

"이 필드를 Templatefield로 변환으로 변환"을 클릭 하면 Visual Studio에서 해당 템플릿이 변환 된 BoundField의 사용자 인터페이스를 모방 하는 Templatefield로 변환를 만들었습니다.By clicking the "Convert this field into a TemplateField," Visual Studio has created a TemplateField whose templates mimic the user interface of the converted BoundField. 브라우저를 통해이 페이지를 방문 하 여이를 확인할 수 있습니다.You can verify this by visiting this page through a browser. BoundFields를 대신 사용 하는 경우에는 템플릿 필드의 모양과 동작이 환경과 동일 하다는 것을 알 수 있습니다.You'll find that the appearance and behavior of the TemplateFields is identical to the experience when BoundFields were used instead.

Note

필요에 따라 템플릿에서 편집 인터페이스를 사용자 지정할 수 있습니다.Feel free to customize the editing interfaces in the templates as needed. 예를 들어 UnitPrice 템플릿 필드에 TextBox를 ProductName textbox 보다 작은 textbox로 렌더링 하는 것이 좋습니다.For example, we may want to have the TextBox in the UnitPrice TemplateFields rendered as a smaller textbox than the ProductName textbox. 이를 위해 텍스트 상자의 Columns 속성을 적절 한 값으로 설정 하거나 Width 속성을 통해 절대 너비를 제공할 수 있습니다.To accomplish this you can set the TextBox's Columns property to an appropriate value or provide an absolute width via the Width property. 다음 자습서에서는 TextBox를 대체 데이터 입력 웹 컨트롤로 바꿔서 편집 인터페이스를 완전히 사용자 지정 하는 방법을 알아봅니다.In the next tutorial we'll see how to completely customize the editing interface by replacing the TextBox with an alternate data entry Web control.

3 단계: GridView의EditItemTemplate s에 유효성 검사 컨트롤 추가Step 3: Adding the Validation Controls to the GridView'sEditItemTemplate s

데이터 입력 양식을 생성할 때는 사용자가 필수 필드를 입력 하 고 제공 된 모든 입력이 올바른 형식의 올바른 값입니다.When constructing data entry forms, it is important that users enter any required fields and that all provided inputs are legal, properly-formatted values. 사용자의 입력이 유효한 지 확인 하기 위해 ASP.NET는 단일 입력 컨트롤의 값에 대 한 유효성을 검사 하는 데 사용 하도록 디자인 된 5 가지 기본 제공 유효성 검사 컨트롤을 제공 합니다.To help ensure that a user's inputs are valid, ASP.NET provides five built-in validation controls that are designed to be used to validate the value of a single input control:

이러한 다섯 가지 컨트롤에 대 한 자세한 내용은 ASP.NET 빠른 시작 자습서유효성 검사 컨트롤 섹션 을 참조 하세요.For more information on these five controls, check out the Validation Controls section of the ASP.NET Quickstart Tutorials.

이 자습서에서는 detailsview의 UnitPrice Templatefield로 변환에서 DetailsView 및 GridView의 ProductName 템플릿 필드와 RequiredFieldValidator 모두에 RequiredFieldValidator를 사용 해야 합니다.For our tutorial we'll need to use a RequiredFieldValidator in both the DetailsView and GridView's ProductName TemplateFields and a RequiredFieldValidator in the DetailsView's UnitPrice TemplateField. 또한 입력 된 가격의 값이 0 보다 크거나 같고 유효한 통화 형식으로 표시 되도록 하는 두 컨트롤의 UnitPrice 템플릿 필드에 CompareValidator를 추가 해야 합니다.Furthermore, we'll need to add a CompareValidator to both controls' UnitPrice TemplateFields that ensures that the entered price has a value greater than or equal to 0 and is presented in a valid currency format.

Note

ASP.NET 1.x는 이와 동일한 5 가지 유효성 검사 컨트롤을가지고 있지만 ASP.NET 2.0에는 여러 가지 향상 된 기능이 추가 되었으며, Internet Explorer 이외의 브라우저에서 클라이언트 쪽 스크립트를 지원 하 고, 페이지의 유효성 검사 컨트롤을로 분할할 수 있습니다. 유효성 검사 그룹.While ASP.NET 1.x had these same five validation controls, ASP.NET 2.0 has added a number of improvements, the main two being client-side script support for browsers other than Internet Explorer and the ability to partition validation controls on a page into validation groups. 2.0의 새 유효성 검사 제어 기능에 대 한 자세한 내용은 개로 나누어서 the Validation Controls in ASP.NET 2.0를 참조 하세요.For more information on the new validation control features in 2.0, refer to Dissecting the Validation Controls in ASP.NET 2.0.

GridView의 템플릿 필드에 EditItemTemplate s에 필요한 유효성 검사 컨트롤을 추가 하는 것부터 시작 해 보겠습니다.Let's start by adding the necessary validation controls to the EditItemTemplate s in the GridView's TemplateFields. 이 작업을 수행 하려면 GridView의 스마트 태그에서 템플릿 편집 링크를 클릭 하 여 템플릿 편집 인터페이스를 표시 합니다.To accomplish this, click on the Edit Templates link from the GridView's smart tag to bring up the template editing interface. 여기에서 드롭다운 목록에서 편집할 템플릿을 선택할 수 있습니다.From here, you can select which template to edit from the drop-down list. 편집 인터페이스를 확대 하려고 하므로 ProductNameUnitPriceEditItemTemplate s에 유효성 검사 컨트롤을 추가 해야 합니다.Since we want to augment the editing interface, we need to add validation controls to the ProductName and UnitPrice's EditItemTemplate s.

ProductName 및 UnitPrice의 EditItemTemplates을 확장 해야 합니다.We Need to Extend the ProductName and UnitPrice's EditItemTemplates

그림 4: ProductNameUnitPriceEditItemTemplate을 확장 해야 합니다 (전체 크기 이미지를 보려면 클릭).Figure 4: We Need to Extend the ProductName and UnitPrice's EditItemTemplate s (Click to view full-size image)

ProductName EditItemTemplate에서 도구 상자에서 텍스트 상자 뒤에 배치 하 여 RequiredFieldValidator를 도구 상자에서 템플릿 편집 인터페이스로 끌어 추가 합니다.In the ProductName EditItemTemplate, add a RequiredFieldValidator by dragging it from the Toolbox into the template editing interface, placing after the TextBox.

EditItemTemplate에 RequiredFieldValidator를 추가 Add a RequiredFieldValidator to the ProductName EditItemTemplate

그림 5: ProductName EditItemTemplate에 RequiredFieldValidator 추가 (전체 크기 이미지를 보려면 클릭)Figure 5: Add a RequiredFieldValidator to the ProductName EditItemTemplate (Click to view full-size image)

모든 유효성 검사 컨트롤은 단일 ASP.NET 웹 컨트롤의 입력에 대 한 유효성을 검사 하는 방식으로 작동 합니다.All validation controls work by validating the input of a single ASP.NET Web control. 따라서 방금 추가한 RequiredFieldValidator가 EditItemTemplate텍스트 상자에 대해 유효성을 검사 해야 함을 나타내야 합니다. 유효성 검사 컨트롤의 ControlToValidate 속성 을 적절 한 웹 컨트롤의 ID 설정 하 여이를 수행 합니다.Therefore, we need to indicate that the RequiredFieldValidator we just added should validate against the TextBox in the EditItemTemplate; this is accomplished by setting the validation control's ControlToValidate property to the ID of the appropriate Web control. 텍스트 상자에는 현재 TextBox1의 비 descript ID 있지만 더 적절 한 항목으로 변경해 보겠습니다.The TextBox currently has the rather nondescript ID of TextBox1, but let's change it to something more appropriate. 템플릿에서 텍스트 상자를 클릭 한 다음 속성 창에서 ID TextBox1에서 EditProductName로 변경 합니다.Click on the TextBox in the template and then, from the Properties window, change the ID from TextBox1 to EditProductName.

텍스트 상자 ID를 EditProductName으로 변경 Change the TextBox's ID to EditProductName

그림 6: 텍스트 상자의 IDEditProductName으로 변경 (전체 크기 이미지를 보려면 클릭)Figure 6: Change the TextBox's ID to EditProductName (Click to view full-size image)

그런 다음 RequiredFieldValidator의 ControlToValidate 속성을 EditProductName로 설정 합니다.Next, set the RequiredFieldValidator's ControlToValidate property to EditProductName. 마지막으로 ErrorMessage 속성 을 "제품 이름을 제공 해야 합니다."로 설정 하 고 Text 속성 을 "*"로 설정 합니다.Finally, set the ErrorMessage property to "You must provide the product's name" and the Text property to "*". 제공 되는 경우 Text 속성 값은 유효성 검사에 실패 하는 경우 유효성 검사 컨트롤에 표시 되는 텍스트입니다.The Text property value, if provided, is the text that is displayed by the validation control if the validation fails. 필요한 ErrorMessage 속성 값은 ValidationSummary 컨트롤에서 사용 됩니다. Text 속성 값을 생략 하면 ErrorMessage 속성 값도 잘못 된 입력에 대 한 유효성 검사 컨트롤에 표시 되는 텍스트입니다.The ErrorMessage property value, which is required, is used by the ValidationSummary control; if the Text property value is omitted, the ErrorMessage property value is also the text displayed by the validation control on invalid input.

RequiredFieldValidator의 이러한 세 가지 속성을 설정한 후 화면은 그림 7과 유사 하 게 표시 됩니다.After setting these three properties of the RequiredFieldValidator, your screen should look similar to Figure 7.

RequiredFieldValidator의 ControlToValidate, ErrorMessage 및 Text 속성을 설정 Set the RequiredFieldValidator's ControlToValidate, ErrorMessage, and Text Properties

그림 7: RequiredFieldValidator의 ControlToValidate, ErrorMessageText 속성 설정 (전체 크기 이미지를 보려면 클릭)Figure 7: Set the RequiredFieldValidator's ControlToValidate, ErrorMessage, and Text Properties (Click to view full-size image)

RequiredFieldValidator가 ProductName EditItemTemplate에 추가 되 면 UnitPrice EditItemTemplate에 필요한 유효성 검사를 추가 하는 것만 남았습니다.With the RequiredFieldValidator added to the ProductName EditItemTemplate, all that remains is to add the necessary validation to the UnitPrice EditItemTemplate. 이 페이지에서 레코드를 편집할 때 UnitPrice 선택 사항 이므로 RequiredFieldValidator를 추가할 필요가 없습니다.Since we've decided that, for this page, the UnitPrice is optional when editing a record, we don't need to add a RequiredFieldValidator. 그러나 입력 유효성 검사기를 추가 하 여 제공 되는 경우 UnitPrice의 형식이 적절 하 게 지정 되 고가 0 보다 크거나 같으면 CompareValidator를 추가 해야 합니다.We do, however, need to add a CompareValidator to ensure that the UnitPrice, if supplied, is properly formatted as a currency and is greater than or equal to 0.

UnitPrice EditItemTemplate에 CompareValidator를 추가 하기 전에 먼저 TextBox 웹 컨트롤의 ID를 TextBox2에서 EditUnitPrice로 변경 하겠습니다.Before we add the CompareValidator to the UnitPrice EditItemTemplate, let's first change the TextBox Web control's ID from TextBox2 to EditUnitPrice. 이렇게 변경한 후에는 CompareValidator를 추가 하 고, 해당 ControlToValidate 속성을 EditUnitPrice로 설정 하 고, ErrorMessage 속성을 "0 보다 크거나 같고 통화 기호를 포함할 수 없습니다."와 Text 속성을 "*"로 설정 합니다.After making this change, add the CompareValidator, setting its ControlToValidate property to EditUnitPrice, its ErrorMessage property to "The price must be greater than or equal to zero and cannot include the currency symbol", and its Text property to "*".

UnitPrice 값이 0 보다 크거나 같아야 함을 나타내려면 CompareValidator의 Operator 속성GreaterThanEqual로, 해당 값을 "0 "으로 설정 하 고 해당 Type 속성Currency로 설정 합니다.To indicate that the UnitPrice value must be greater than or equal to 0, set the CompareValidator's Operator property to GreaterThanEqual, its ValueToCompare property to "0", and its Type property to Currency. 다음 선언 구문은 이러한 변경을 수행한 후 UnitPrice Templatefield로 변환의 EditItemTemplate를 보여 줍니다.The following declarative syntax shows the UnitPrice TemplateField's EditItemTemplate after these changes have been made:

<EditItemTemplate>
    <asp:TextBox ID="EditUnitPrice" runat="server"
      Text='<%# Bind("UnitPrice", "{0:c}") %>'
      Columns="6"></asp:TextBox>
    <asp:CompareValidator ID="CompareValidator1" runat="server"
        ControlToValidate="EditUnitPrice"
        ErrorMessage="The price must be greater than or equal to zero and
                       cannot include the currency symbol"
        Operator="GreaterThanEqual" Type="Currency"
        ValueToCompare="0">*</asp:CompareValidator>
</EditItemTemplate>

이러한 변경을 수행한 후 브라우저에서 페이지를 엽니다.After making these changes, open the page in a browser. 제품을 편집할 때 이름을 생략 하거나 잘못 된 가격 값을 입력 하려고 하면 텍스트 상자 옆에 별표가 표시 됩니다.If you attempt to omit the name or enter an invalid price value when editing a product, an asterisk appears next to the textbox. 그림 8에 나와 있는 것 처럼 $19.95과 같은 통화 기호를 포함 하는 가격 값은 잘못 된 것으로 간주 됩니다.As Figure 8 shows, a price value that includes the currency symbol such as $19.95 is considered invalid. CompareValidator의 Currency Type는 숫자 구분 기호 (예: 문화권 설정에 따라 쉼표 또는 마침표)와 선행 더하기 또는 빼기 기호를 허용 하지만 통화 기호는 허용 하지 않습니다.The CompareValidator's Currency Type allows for digit separators (such as commas or periods, depending on the culture settings) and a leading plus or minus sign, but does not permit a currency symbol. 이 동작은 편집 인터페이스에서 현재 통화 형식을 사용 하 여 UnitPrice를 렌더링 하므로 플렉스 사용자를 지정할 수 있습니다.This behavior may perplex users as the editing interface currently renders the UnitPrice using the currency format.

Note

삽입, 업데이트 및 삭제 자습서와 관련 된 이벤트 에서 BoundField의 DataFormatString 속성을 통화로 지정 하기 위해 {0:c}로 설정 합니다.Recall that in the Events Associated with Inserting, Updating, and Deleting tutorial we set the BoundField's DataFormatString property to {0:c} in order to format it as a currency. 또한 ApplyFormatInEditMode 속성을 true로 설정 하 여 GridView의 편집 인터페이스에서 UnitPrice를 통화로 서식 지정 합니다.Furthermore, we set the ApplyFormatInEditMode property to true, causing the GridView's editing interface to format the UnitPrice as a currency. BoundField을 Templatefield로 변환로 변환 하는 경우 Visual Studio는 <%# Bind("UnitPrice", "{0:c}") %>데이터 바인딩 구문을 사용 하 여 이러한 설정을 지정 하 고 TextBox의 Text 속성을 통화로 지정 합니다.When converting the BoundField into a TemplateField, Visual Studio noted these settings and formatted the TextBox's Text property as a currency using the databinding syntax <%# Bind("UnitPrice", "{0:c}") %>.

입력이 잘못 된 텍스트 상자 옆에 별표가 표시 An Asterisk Appears Next to the Textboxes with Invalid Input

그림 8: 잘못 된 입력이 있는 텍스트 상자 옆에 별표 표시 (전체 크기 이미지를 보려면 클릭)Figure 8: An Asterisk Appears Next to the Textboxes with Invalid Input (Click to view full-size image)

유효성 검사는 그대로 작동 하지만, 사용자는 레코드를 편집할 때 통화 기호를 수동으로 제거 해야 합니다 .이는 허용 되지 않습니다.While the validation works as-is, the user has to manually remove the currency symbol when editing a record, which is not acceptable. 이를 해결 하기 위해 다음과 같은 세 가지 옵션이 있습니다.To remedy this, we have three options:

  1. UnitPrice 값의 형식이 통화로 지정 되지 않도록 EditItemTemplate를 구성 합니다.Configure the EditItemTemplate so that the UnitPrice value is not formatted as a currency.
  2. 사용자가 CompareValidator를 제거 하 고 올바른 형식의 통화 값을 제대로 확인 하는 RegularExpressionValidator로 바꿔서 통화 기호를 입력할 수 있습니다.Allow the user to enter a currency symbol by removing the CompareValidator and replacing it with a RegularExpressionValidator that properly checks for a properly formatted currency value. 여기에서 발생 하는 문제는 통화 값의 유효성을 검사 하는 정규식이 매우 간단 하지 않으며, 문화권 설정을 통합 하려는 경우 코드를 작성 해야 한다는 것입니다.The problem here is that the regular expression to validate a currency value is not pretty and would require writing code if we wanted to incorporate culture settings.
  3. 유효성 검사 컨트롤을 완전히 제거 하 고 GridView의 RowUpdating 이벤트 처리기에서 서버 쪽 유효성 검사 논리를 사용 합니다.Remove the validation control altogether and rely on server-side validation logic in the GridView's RowUpdating event handler.

이 연습에 대 한 옵션 #1 살펴보겠습니다.Let's go with option #1 for this exercise. 현재 UnitPriceEditItemTemplate의 텍스트 상자에 대 한 데이터 바인딩 식으로 인해 통화 형식으로 지정 됩니다. <%# Bind("UnitPrice", "{0:c}") %>.Currently the UnitPrice is formatted as a currency due to the databinding expression for the TextBox in the EditItemTemplate: <%# Bind("UnitPrice", "{0:c}") %>. Bind 문을 Bind("UnitPrice", "{0:n2}")로 변경 합니다. 그러면 결과의 형식이 전체 자릿수와 같은 숫자로 지정 됩니다.Change the Bind statement to Bind("UnitPrice", "{0:n2}"), which formats the result as a number with two digits of precision. 선언적 구문을 통해 직접 수행 하거나 UnitPrice Templatefield로 변환의 EditItemTemplate EditUnitPrice 텍스트 상자에서 데이터 바인딩 편집 링크를 클릭 하 여이 작업을 수행할 수 있습니다 (그림 9 및 10 참조).This can be done directly through the declarative syntax or by clicking on the Edit DataBindings link from the EditUnitPrice TextBox in the UnitPrice TemplateField's EditItemTemplate (see Figures 9 and 10).

입력란의 데이터 바인딩 편집 링크를 클릭 Click on the TextBox's Edit DataBindings link

그림 9: 입력란의 데이터 바인딩 편집 링크 클릭 (전체 크기 이미지를 보려면 클릭)Figure 9: Click on the TextBox's Edit DataBindings link (Click to view full-size image)

Bind 문에 서식 지정자를 지정 Specify the Format Specifier in the Bind Statement

그림 10: Bind 문에 서식 지정자 지정 (전체 크기 이미지를 보려면 클릭)Figure 10: Specify the Format Specifier in the Bind Statement (Click to view full-size image)

이와 같이 변경 하면 편집 인터페이스에서 형식이 지정 된 가격은 쉼표를 그룹 구분 기호로 포함 하 고 마침표를 소수 구분 기호로 포함 하지만 통화 기호는 그대로 둡니다.With this change, the formatted price in the editing interface includes commas as the group separator and a period as the decimal separator, but leaves off the currency symbol.

Note

UnitPrice EditItemTemplate는 RequiredFieldValidator를 포함 하지 않으므로 다시 게시를 뒤따르게 업데이트 논리를 시작할 수 있습니다.The UnitPrice EditItemTemplate doesn't include a RequiredFieldValidator, allowing the postback to ensue and the updating logic to commence. 그러나 삽입, 업데이트 및 삭제 자습서와 관련 된 이벤트 검사 에서 복사 된 RowUpdating 이벤트 처리기에는 UnitPrice 제공 되도록 하는 프로그래밍 검사가 포함 되어 있습니다.However, the RowUpdating event handler copied over from the Examining the Events Associated with Inserting, Updating, and Deleting tutorial includes a programmatic check that ensures that the UnitPrice is provided. 이 논리를 그대로 제거 하거나 그대로 유지 하거나 UnitPrice EditItemTemplate에 RequiredFieldValidator를 추가 합니다.Feel free to remove this logic, leave it in as-is, or add a RequiredFieldValidator to the UnitPrice EditItemTemplate.

4 단계: 데이터 입력 문제 요약Step 4: Summarizing Data Entry Problems

5 개의 유효성 검사 컨트롤 외에도 ASP.NET에는 잘못 된 데이터를 검색 한 유효성 검사 컨트롤의 ErrorMessage을 표시 하는 ValidationSummary 컨트롤이포함 되어 있습니다.In addition to the five validation controls, ASP.NET includes the ValidationSummary control, which displays the ErrorMessage s of those validation controls that detected invalid data. 이 요약 데이터는 웹 페이지 또는 모달 클라이언트 쪽 messagebox에서 텍스트로 표시 될 수 있습니다.This summary data can be displayed as text on the web page or through a modal, client-side messagebox. 유효성 검사 문제를 요약 하는 클라이언트 쪽 messagebox를 포함 하도록이 자습서를 개선 하겠습니다.Let's enhance this tutorial to include a client-side messagebox summarizing any validation problems.

이를 수행 하려면 도구 상자에서 ValidationSummary 컨트롤을 디자이너로 끌어 옵니다.To accomplish this, drag a ValidationSummary control from the Toolbox onto the Designer. 유효성 검사 컨트롤의 위치는 단지 messagebox로 요약을 표시 하도록 구성 하기 때문에 중요 하지 않습니다.The location of the Validation control doesn't really matter, since we're going to configure it to only display the summary as a messagebox. 컨트롤을 추가한 후 Showsummary 속성False로 설정 하 고 showsummary 속성True로 설정 합니다.After adding the control, set its ShowSummary property to False and its ShowMessageBox property to True. 또한 유효성 검사 오류는 클라이언트 쪽 messagebox에 요약 됩니다.With this addition, any validation errors are summarized in a client-side messagebox.

유효성 검사 오류가 클라이언트 쪽 Messagebox에 요약 The Validation Errors are Summarized in a Client-Side Messagebox

그림 11: 유효성 검사 오류가 클라이언트 쪽 Messagebox에 요약 되어 있습니다 (전체 크기 이미지를 보려면 클릭).Figure 11: The Validation Errors are Summarized in a Client-Side Messagebox (Click to view full-size image)

5 단계: DetailsView의InsertItemTemplate에 유효성 검사 컨트롤 추가Step 5: Adding the Validation Controls to the DetailsView'sInsertItemTemplate

이 자습서에 대해 남아 있는 모든 것은 DetailsView의 삽입 인터페이스에 유효성 검사 컨트롤을 추가 하는 것입니다.All that remains for this tutorial is to add the validation controls to the DetailsView's inserting interface. 유효성 검사 컨트롤을 DetailsView의 템플릿에 추가 하는 프로세스는 3 단계에서 검사 한 것과 동일 합니다. 따라서이 단계에서는 작업을 간단히 설명 합니다.The process of adding validation controls to the DetailsView's templates is identical to that examined in Step 3; therefore, we'll breeze through the task in this step. GridView의 EditItemTemplate s를 사용 하는 것 처럼 ID 텍스트 상자의 이름을 nondescript TextBox1에서 바꾸고 InsertProductNameInsertUnitPrice으로 TextBox2 하는 것이 좋습니다.As we did with the GridView's EditItemTemplate s, I encourage you to rename the ID s of the TextBoxes from the nondescript TextBox1 and TextBox2 to InsertProductName and InsertUnitPrice.

ProductName InsertItemTemplate에 RequiredFieldValidator를 추가 합니다.Add a RequiredFieldValidator to the ProductName InsertItemTemplate. 템플릿의 텍스트 상자 ID에 대 한 ControlToValidate Text 속성을 "*"로 설정 하 고 해당 ErrorMessage 속성을 "제품 이름을 제공 해야 합니다."로 설정 합니다.Set the ControlToValidate to the ID of the TextBox in the template, its Text property to "*" and its ErrorMessage property to "You must provide the product's name".

새 레코드를 추가할 때이 페이지에 UnitPrice 필요 하므로 UnitPrice InsertItemTemplate에 RequiredFieldValidator를 추가 하 고 ControlToValidate, TextErrorMessage 속성을 적절 하 게 설정 합니다.Since the UnitPrice is required for this page when adding a new record, add a RequiredFieldValidator to the UnitPrice InsertItemTemplate, setting its ControlToValidate, Text, and ErrorMessage properties appropriately. 마지막으로, GridView의 ErrorMessage에서 Type의 CompareValidator와 같이 ControlToValidate, Text, Operator, ValueToCompare, UnitPriceEditItemTemplate속성을 구성 하 여 UnitPrice InsertItemTemplate에 CompareValidator를 추가 합니다.Finally, add a CompareValidator to the UnitPrice InsertItemTemplate as well, configuring its ControlToValidate, Text, ErrorMessage, Type, Operator, and ValueToCompare properties just like we did with the UnitPrice's CompareValidator in the GridView's EditItemTemplate.

이러한 유효성 검사 컨트롤을 추가한 후에는 이름이 제공 되지 않았거나 가격이 음수 이거나 형식이 잘못 된 경우 시스템에 새 제품을 추가할 수 없습니다.After adding these validation controls, a new product cannot be added to the system if its name is not supplied or if its price is a negative number or illegally formatted.

유효성 검사 논리가 DetailsView의 삽입 인터페이스에 추가 되었습니다.Validation Logic has been Added to the DetailsView's Inserting Interface

그림 12: 유효성 검사 논리가 DetailsView의 삽입 인터페이스에 추가 되었습니다 (전체 크기 이미지를 보려면 클릭).Figure 12: Validation Logic has been Added to the DetailsView's Inserting Interface (Click to view full-size image)

6 단계: 유효성 검사 컨트롤을 유효성 검사 그룹으로 분할Step 6: Partitioning the Validation Controls Into Validation Groups

이 페이지는 두 가지 논리적으로 서로 다른 유효성 검사 컨트롤 집합, 즉 GridView의 편집 인터페이스에 해당 하는 컨트롤과 DetailsView의 삽입 인터페이스에 해당 하는 컨트롤을 구성 합니다.Our page consists of two logically disparate sets of validation controls: those that correspond to the GridView's editing interface and those that correspond to the DetailsView's inserting interface. 기본적으로 포스트백이 발생 하면 페이지의 모든 유효성 검사 컨트롤이 선택 됩니다.By default, when a postback occurs all validation controls on the page are checked. 그러나 레코드를 편집할 때 DetailsView의 삽입 인터페이스 유효성 검사 컨트롤의 유효성을 검사 하지 않으려고 합니다.However, when editing a record we don't want the DetailsView's inserting interface's validation controls to validate. 그림 13은 사용자가 완전 한 값으로 제품을 편집 하는 경우 현재 딜레마를 보여 줍니다. 삽입 인터페이스의 이름 및 가격 값이 비어 있기 때문에 업데이트를 클릭 하면 유효성 검사 오류가 발생 합니다.Figure 13 illustrates our current dilemma when a user is editing a product with perfectly legal values, clicking Update causes a validation error because the name and price values in the inserting interface are blank.

제품을 업데이트 삽입 하는 인터페이스의 유효성 검사 컨트롤이 발생 합니다.Updating a Product Causes the Inserting Interface's Validation Controls to Fire

그림 13: 제품을 업데이트 하면 삽입 인터페이스의 유효성 검사 컨트롤이 발생 합니다 (전체 크기 이미지를 보려면 클릭).Figure 13: Updating a Product Causes the Inserting Interface's Validation Controls to Fire (Click to view full-size image)

ASP.NET 2.0의 유효성 검사 컨트롤은 ValidationGroup 속성을 통해 유효성 검사 그룹으로 분할할 수 있습니다.The validation controls in ASP.NET 2.0 can be partitioned into validation groups through their ValidationGroup property. 그룹의 유효성 검사 컨트롤 집합을 연결 하려면 ValidationGroup 속성을 동일한 값으로 설정 하면 됩니다.To associate a set of validation controls in a group, simply set their ValidationGroup property to the same value. 이 자습서의 경우 GridView의 템플릿 필드에서 유효성 검사 컨트롤의 ValidationGroup 속성을 EditValidationControls로 설정 하 고 DetailsView의 템플릿 필드의 ValidationGroup 속성을 InsertValidationControls로 설정 합니다.For our tutorial, set the ValidationGroup properties of the validation controls in the GridView's TemplateFields to EditValidationControls and the ValidationGroup properties of the DetailsView's TemplateFields to InsertValidationControls. 이러한 변경은 선언적 태그에서 직접 수행 하거나 디자이너의 편집 템플릿 인터페이스를 사용할 때 속성 창을 통해 수행할 수 있습니다.These changes can be done directly in the declarative markup or through the Properties window when using the Designer's edit template interface.

유효성 검사 컨트롤 외에도 ASP.NET 2.0의 단추 및 단추 관련 컨트롤에는 ValidationGroup 속성이 포함 되어 있습니다.In addition to the validation controls, the Button and Button-related controls in ASP.NET 2.0 also include a ValidationGroup property. 유효성 검사 그룹의 유효성 검사기는 동일한 ValidationGroup 속성 설정을 가진 단추로 포스트백이 발생 한 경우에만 유효성 검사를 수행 합니다.A validation group's validators are checked for validity only when a postback is induced by a Button that has the same ValidationGroup property setting. 예를 들어 DetailsView의 삽입 단추가 InsertValidationControls 유효성 검사 그룹을 트리거하기 위해 CommandField의 ValidationGroup 속성을 InsertValidationControls으로 설정 해야 합니다 (그림 14 참조).For example, in order for the DetailsView's Insert button to trigger the InsertValidationControls validation group we need to set the CommandField's ValidationGroup property to InsertValidationControls (see Figure 14). 또한 GridView의 CommandField's 속성을 EditValidationControls로 설정 합니다.ValidationGroupAdditionally, set the GridView's CommandField's ValidationGroup property to EditValidationControls.

DetailsView의 CommandField's ValidationGroup 속성을 InsertValidationControls로 설정 합니다.Set the DetailsView's CommandField's ValidationGroup property to InsertValidationControls

그림 14: DetailsView의 commandfield's 속성을 InsertValidationControls로 설정 (전체 크기 이미지를 보려면 클릭)ValidationGroupFigure 14: Set the DetailsView's CommandField's ValidationGroup property to InsertValidationControls (Click to view full-size image)

이러한 변경 후에는 DetailsView 및 GridView의 템플릿 필드와 CommandFields가 다음과 같이 표시 됩니다.After these changes, the DetailsView and GridView's TemplateFields and CommandFields should look similar to the following:

DetailsView의 템플릿 필드 및 CommandFieldThe DetailsView's TemplateFields and CommandField

<asp:TemplateField HeaderText="ProductName"
  SortExpression="ProductName">
    <InsertItemTemplate>
        <asp:TextBox ID="InsertProductName" runat="server"
         Text='<%# Bind("ProductName") %>'></asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator2"
          runat="server" ControlToValidate="InsertProductName"
            ErrorMessage="You must provide the product name"
            ValidationGroup="InsertValidationControls">*
        </asp:RequiredFieldValidator>
    </InsertItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="UnitPrice" SortExpression="UnitPrice">
    <InsertItemTemplate>
         <asp:TextBox ID="InsertUnitPrice" runat="server"
           Text='<%# Bind("UnitPrice") %>' Columns="6">
         </asp:TextBox>
         <asp:RequiredFieldValidator ID="RequiredFieldValidator3"
           runat="server" ControlToValidate="InsertUnitPrice"
            ErrorMessage="You must provide the product price"
            ValidationGroup="InsertValidationControls">*
         </asp:RequiredFieldValidator>
        <asp:CompareValidator ID="CompareValidator2" runat="server"
           ControlToValidate="InsertUnitPrice"
           ErrorMessage="The price must be greater than or equal to zero and
                          cannot include the currency symbol"
           Operator="GreaterThanEqual" Type="Currency" ValueToCompare="0"
           ValidationGroup="InsertValidationControls">*
        </asp:CompareValidator>
     </InsertItemTemplate>
 </asp:TemplateField>
<asp:CommandField ShowInsertButton="True"
  ValidationGroup="InsertValidationControls" />

GridView의 CommandField 및 템플릿 필드The GridView's CommandField and TemplateFields

<asp:CommandField ShowEditButton="True" ValidationGroup="EditValidationControls" />
<asp:TemplateField HeaderText="ProductName"
  SortExpression="ProductName">
    <EditItemTemplate>
        <asp:TextBox ID="EditProductName" runat="server"
          Text='<%# Bind("ProductName") %>'>
        </asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1"
            runat="server" ControlToValidate="EditProductName"
            ErrorMessage="You must provide the product name"
            ValidationGroup="EditValidationControls">*
        </asp:RequiredFieldValidator>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label1" runat="server"
          Text='<%# Bind("ProductName") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="UnitPrice" SortExpression="UnitPrice">
    <EditItemTemplate>
        <asp:TextBox ID="EditUnitPrice" runat="server"
          Text='<%# Bind("UnitPrice", "{0:n2}") %>' Columns="6"></asp:TextBox>
        <asp:CompareValidator ID="CompareValidator1" runat="server"
            ControlToValidate="EditUnitPrice"
            ErrorMessage="The price must be greater than or equal to zero and
                           cannot include the currency symbol"
            Operator="GreaterThanEqual" Type="Currency"
            ValueToCompare="0"
            ValidationGroup="EditValidationControls">*
        </asp:CompareValidator>
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label2" runat="server"
            Text='<%# Bind("UnitPrice", "{0:c}") %>'>
        </asp:Label>
    </ItemTemplate>
</asp:TemplateField>

이 시점에서 편집 별 유효성 검사 컨트롤은 GridView의 업데이트 단추를 클릭 한 경우에만 발생 하 고, DetailsView의 삽입 단추를 클릭 한 경우에만 삽입 별 유효성 검사 컨트롤이 실행 되어 그림 13에 의해 강조 표시 된 문제를 해결 합니다.At this point the edit-specific validation controls fire only when the GridView's Update button is clicked and the insert-specific validation controls fire only when the DetailsView's Insert button is clicked, resolving the problem highlighted by Figure 13. 그러나이 변경 내용으로 잘못 된 데이터를 입력할 때 ValidationSummary 컨트롤은 더 이상 표시 되지 않습니다.However, with this change our ValidationSummary control no longer displays when entering invalid data. ValidationSummary 컨트롤에는 또한 ValidationGroup 속성이 포함 되어 있으며 해당 유효성 검사 그룹의 유효성 검사 컨트롤에 대 한 요약 정보만 표시 합니다.The ValidationSummary control also contains a ValidationGroup property and only shows summary information for those validation controls in its validation group. 따라서이 페이지에는 InsertValidationControls 유효성 검사 그룹 및 EditValidationControls에 대 한 유효성 검사 컨트롤이 두 개 있어야 합니다.Therefore, we need to have two validation controls in this page, one for the InsertValidationControls validation group and one for EditValidationControls.

<asp:ValidationSummary ID="ValidationSummary1" runat="server"
    ShowMessageBox="True" ShowSummary="False"
    ValidationGroup="EditValidationControls" />
<asp:ValidationSummary ID="ValidationSummary2" runat="server"
    ShowMessageBox="True" ShowSummary="False"
    ValidationGroup="InsertValidationControls" />

이 외에도 자습서가 완료 되었습니다.With this addition our tutorial is complete!

요약Summary

BoundFields는 삽입 및 편집 인터페이스를 모두 제공할 수 있지만 인터페이스는 사용자 지정할 수 없습니다.While BoundFields can provide both an inserting and editing interface, the interface is not customizable. 일반적으로 사용자가 올바른 형식으로 필요한 입력을 입력할 수 있도록 편집 및 삽입 인터페이스에 유효성 검사 컨트롤을 추가 하려고 합니다.Commonly, we want to add validation controls to the editing and inserting interface to ensure that the user enters required inputs in a legal format. 이를 위해 BoundFields를 템플릿 필드로 변환 하 고 유효성 검사 컨트롤을 해당 템플릿에 추가 해야 합니다.To accomplish this we must convert the BoundFields into TemplateFields and add the validation controls to the appropriate template(s). 이 자습서에서는 삽입, 업데이트 및 삭제 자습서와 관련 된 이벤트 검사 에서 예제를 확장 하 여 DetailsView의 삽입 인터페이스와 GridView의 편집 인터페이스에 유효성 검사 컨트롤을 추가 했습니다.In this tutorial we extended the example from the Examining the Events Associated with Inserting, Updating, and Deleting tutorial, adding validation controls to both the DetailsView's inserting interface and the GridView's editing interface. 또한 ValidationSummary 컨트롤을 사용 하 여 요약 유효성 검사 정보를 표시 하는 방법 및 페이지의 유효성 검사 컨트롤을 고유한 유효성 검사 그룹으로 분할 하는 방법을 살펴보았습니다.Moreover, we saw how to display summary validation information using the ValidationSummary control and how to partition the validation controls on the page into distinct validation groups.

이 자습서에서 살펴본 것 처럼 템플릿 필드를 사용 하면 편집 및 삽입 인터페이스를 확대 하 여 유효성 검사 컨트롤을 포함할 수 있습니다.As we saw in this tutorial, TemplateFields allow the editing and inserting interfaces to be augmented to include validation controls. 또한 추가 입력 웹 컨트롤을 포함 하도록 템플릿 필드를 확장 하 여 텍스트 상자를 보다 적합 한 웹 컨트롤로 바꿀 수 있습니다.TemplateFields can also be extended to include additional input Web controls, enabling the TextBox to be replaced by a more suitable Web control. 다음 자습서에서는 텍스트 상자 컨트롤을 데이터 바인딩된 DropDownList 컨트롤로 바꾸는 방법에 대해 설명 합니다 .이 컨트롤은 외래 키 (예: Products 테이블의 CategoryID 또는 SupplierID)를 편집할 때 적합 합니다.In our next tutorial we'll see how to replace the TextBox control with a data-bound DropDownList control, which is ideal when editing a foreign key (such as CategoryID or SupplierID in the Products table).

행복 한 프로그래밍Happy Programming!

저자 정보About the Author

Scott Mitchell(7 개의 ASP/ASP. NET books 및 4GuysFromRolla.com창립자)은 1998부터 Microsoft 웹 기술을 사용 하 여 작업 했습니다.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott은 독립 컨설턴트, 강사 및 기록기로 작동 합니다.Scott works as an independent consultant, trainer, and writer. 최신 책은 24 시간 이내에 ASP.NET 2.0을 sams teach yourself것입니다.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. mitchell@4GuysFromRolla.com에 도달할 수 있습니다 .He can be reached at mitchell@4GuysFromRolla.com. 또는 블로그를 통해 http://ScottOnWriting.NET에서 찾을 수 있습니다.or via his blog, which can be found at http://ScottOnWriting.NET.

특별히 감사 합니다.Special Thanks To

이 자습서 시리즈는 많은 유용한 검토자가 검토 했습니다.This tutorial series was reviewed by many helpful reviewers. 이 자습서의 리드 검토자는 Liz Shulok 및 Zack Jones 였습니다.Lead reviewers for this tutorial were Liz Shulok and Zack Jones. 예정 된 MSDN 문서를 검토 하는 데 관심이 있나요?Interested in reviewing my upcoming MSDN articles? 그렇다면mitchell@4GuysFromRolla.com에서 줄을 삭제 합니다.If so, drop me a line at mitchell@4GuysFromRolla.com.