본문 바로가기

.NET/ASP.NET

4.5 Web Form에서 Model Binding기능 지원


ASP.NET 4.5 모델 바인딩 기능

좋은 소식 - ASP.NET 4.5에서, DataBound컨트롤에 직접 모델을 바인딩 할수 있는 기능이 추가되었습니다. 이 기능이 추가 됨으로써 CRUD와 페이징 기능을 보다 효과적으로 구현할 수 있습니다.  이기능은 ObjectDataSource 컨트롤의 컨셉과 ASP.NET MVC의 모델 바인딩 컨셉을 포함하고 있습니다. 앞으로 간단하게 이것들을 살펴볼 것입니다.  ASP.NET4.5는 .NET 4.5에서 시행되기 때문에 .NET4.5를 설치해야 합니다(비주얼 스튜디오 2011 preview를 클릭). ASP.NET 4.5의 다양한 기능에 대한 개요를 얻으려면,  이 문서를 참고하세요.

참고 : Visual Studio 2011 preview를 설치하려면,  이 주소를 사용해 주세요(윈도우 8 개발자 미리보기).

여기서는 ASP.NET 4.5 에  'Model Binding with Web Forms'라는  흥미로운 기능에 대허서 설명할 것입니다. 기존의 버전들에서 웹폼의 경우 데이터의 바인딩을 할경우에 우리는 일반적으로 'Eval'메서드를 사용하였습니다. 런타임동안 Eval를 호출하여 현 시점의 bound data객체에 대해 리플렉션을 사용해여 그 객체의 멤버들의 값들을 추출해 낼수 있었습니다. 비록 이러한 작업들이 데이터 바인딩의 가장 쉬운 방법이라고 할지라도 이러한 바인딩 방법에는 컴파일타임시 데이터 이름 체킹이라는 한계점이 있습니다(Eval('name')).

ASP.NET 4.5에서는 모델 바인딩이 개선되었습니다. 아래와 같은 과정을 밟으면서 우리는 모델바인딩의 새로운 기능들을 맛볼것입니다 :
  • Model binding with Web Forms.(웹폼에서의 모델바인딩)
  • Value Providers.(밸류 프로바이더)
  • Filtering.(필터링)
  • Performing Update Operations.(업데이트하기)
작업을 진행하기 위해 Sql Server 2008 R2와 아래와 같은 테이블을 가지고 있는 'Company' 데이터베이스를 사용할것입니다.:

Department - DeptNo (int) Primary Key, Dname (varchar(50)),Location (varchar(50)).
Employee - EmpNo (int) Primary Key, EmpName (varchar(50)),Salary (int), DeptNo(int) Forwign Key. 

시작해 볼까요.

1 단계 :  Visual Studio 2011 Developer Preview를 여시고 새로운 Web Application을 생성합니다. 여기서 Framework 타겟버전을 4.5로 확인해 주세요. application 이름을 'ASPNET45_ModelBinding'라고 합시다.

2 단계 :  이 프로젝트에서 새로운 폴더 Model과 Department를 추가합니다. Department 폴더에는 두개의 웹폼페이지 ‘Departments.aspx’ 과 ‘DepartmentDetails.aspx’를 추가합니다.(두페이지 다 MasterPage참조)

3 단계 : 모델폴더에 ADO.NET Entity Data Model울 추가하고 이름을 ‘CompanyEDMX.edmx’고 짓습니다. 마법사툴에서 Company Database를 섵개하고 Department와 Employee테이블을 선택합니다. 마법사를 완료하면 아래와 같은 결과가 나올겁니다.

ASP.NET 4.5 모델 바인딩
4 단계 : Departments.aspx페이지를 Source View로 해서 열고 리피터 컨트롤을 Department Model 과 함께 아래와 같이 바운딩시킵니다.

asp.net 4.5 모델 바인딩 
위의 코드는 ASP.NET4.5에서 DataBound 컨트롤에 추가된 새로운 데이터 바운드 기능들을 보여줍니다.Department Model은 'ModelType'이라는 리피터의 새로운 프로퍼티에 할당됩니다. 이 프로퍼티는 모든 DataBound컨트롤에서 사용될수 있습니다. 이 기능은 개발자들에게 데이터 타입을 정의하고 그 정의된이터들을 컨트롤에 바인딩이 가능하게 해줍니다. 또한 컨트롤내부에 모델의 프로퍼티들까지 바인딩하는것을 가능케 해줍니다. 위의 코드는 리피터 안에 'ItemTemplate'을 정의 하고 DeptNo 값을 QueryString으로 넘겨주는 예제를 보여주고 있습니다.


5 단계 : Departments.aspx.cs 코드로 가서 아래와 같이 작성해 줍니다. :

개체 컨텍스트

위의 코드는 리피터 컨트롤의 Datasource에 데이터소스를 설정해 주는 코드입니다.

6 단계 :
 브라우저에서 보면 다음과 같은 결과가 보여질 겁니다.



clip_image002

OS에서 오른쪽 맨밑에 System Tray를 보십시오. ASP.NET 개발 서버가 구동되는 대신 ASP.NET 4.5는 아래에서 보여주는 것과 같이 IIS Express를 사용합니다.

IIS 익스프레스

7 단계 : 4 단계에서 ItemsTemplate안에서 우리는 <a href="">에 쿼리스트링을 작성하였습니다. 이페이지에서는 4단계에서 링크를 눌렀을때 이동하는 페이지 즉 특정 Department의 디테일 화면을 보여줄 겁니다.  DepartmentDetails.aspx를 열고 'Source view'로 보세요 그리고 DetailsView 데이터바운드 컨트롤을 삽입해 주세요. Step4에서 설명한것과같이 여기서도 ModelType 프로퍼티에 'Department'모델을 할당해 줄겁니다.

DetailsView또는 FormView를 써봤던 개발자들은 이러한 컨트롤은 DML 작업을 이행한다는 것을 알것입니다. 기존의 DML 작업을 하기위해서는 우리는 ObjectDataProvider을 사용하였고 이 Provider는 일반적으로 Get, Insert, Update 그리고 Delete 메서들을 구성하고 있습니다.
  • SelectMethod : IEnumarable 반환하는 메서드에 대한 호출을 실행하기 위해 사용.
  • InsertMethod 삽입 작업을 수행하는 메서드를 호출하기 위해 사용됩니다.
  • UdateMethod : 업데이트 작업을 수행하는 메서드를 호출하기 위해 사용됩니다.
  • DeleteMethod : 삭제 작업을 수행하는 메서드를 호출하기 위해 사용됩니다.
아래와 같이 DepartmentDetails.aspx을 구성합니다 :

자세한 내용은 바인딩 asp.net 4.5를 참조

8 단계 : DepartmentDetails.aspx.cs을 열고 그 안에 다음 코드를 추가 :

asp.net crud 작업
 

위의 코드들을 차근차근 보죠. 위의 메세드들은 사용자 화면에서 어떠한 UI 컨트롤을 사용하지 않았습니다.  모든 이러한 메세드들은 Model object에서 작동합니다. 그리고 이 기능은 상당량의 코드 절약 효과가 있습니다. 중요한 한가지 더 , 'GetDepartment()' 메서드를 보면 'DeptNo'라는 인풋 파라미터를 QueryString Value provider와함께 정의 하였습니다. 이기능은 자동으로 QueryString에 있는 DeptNo을 자동으로 읽고 DetailsView에 Department의 세부사항들을 보여줍니다.

참고 : 4.5이전 버전에서는 Request.QueryString["DeptNo"]으로 가능합니다.

9 단계 : 지금 Site.Master 열고 다음 메뉴 항목을 추가 :

<asp:MenuItem NavigateUrl="~/Department/Departments.aspx" Text="Departments"/>

10 단계 : 시작을 Default.aspx 페이지로 만들고 응용 프로그램을 실행합니다. Default.aspx페이지에 Department와 Employee메뉴가 보여질것입니다. 'Department'메뉴를 클릭하면 Department.aspx가 보여지게 될것입니다.  한번해보세요

asp.net 4.5 쿼리 문자열

QueryString은 DEPTNO을 가지고 있으며, DEPTNO의 value에 따라, DetailsView는 부 세부 사항을 표시합니다. 여기서 업데이트 인서트 기능도 테스트 가능합니다.

결론 : 모델바인딩 기능은 개발자들에게 Webform을 개발함에 있어 Model을 독립적으로 구현할수 있습니다.
 
전체 소스 코드 는이 문서의 다운로드 받으실 수 있습니다 여기에