작성자: 스콧 미첼
이 자습서에서는 ObjectDataSource 컨트롤을 살펴보고, 이 컨트롤을 사용하면 코드 줄을 작성하지 않고도 이전 자습서에서 만든 BLL에서 검색된 데이터를 바인딩할 수 있습니다.
소개
애플리케이션 아키텍처와 웹 사이트 페이지 레이아웃이 완성되면 다양한 공통 데이터 및 보고 관련 작업을 수행하는 방법을 탐색할 준비가 되었습니다. 이전 자습서에서는 DAL 및 BLL의 데이터를 ASP.NET 페이지의 데이터 웹 컨트롤에 프로그래밍 방식으로 바인딩하는 방법을 살펴보았습니다. 데이터 웹 컨트롤의 DataSource
속성을 표시할 데이터에 할당한 다음 컨트롤의 DataBind()
메서드를 호출하는 이 구문은 ASP.NET 1.x 애플리케이션에서 사용되는 패턴이었으며 2.0 애플리케이션에서 계속 사용할 수 있습니다. 그러나 ASP.NET 2.0의 새로운 데이터 원본 컨트롤은 선언적 데이터 작업 방법을 제공합니다. 이러한 컨트롤을 사용하면 코드 줄을 작성하지 않고도 이전 자습서 에서 만든 BLL에서 검색된 데이터를 바인딩할 수 있습니다!
ASP.NET 2.0에는 SqlDataSource, AccessDataSource, ObjectDataSource, XmlDataSource 및 SiteMapDataSource 의 5가지 기본 제공 데이터 소스 컨트롤이 포함되어 있지만 필요한 경우 사용자 지정 데이터 소스 컨트롤을 직접 작성할 수 있습니다. 자습서 응용 프로그램에 대한 아키텍처를 개발했으므로 BLL 클래스에 대해 ObjectDataSource를 사용할 것입니다.
그림 1: ASP.NET 2.0에는 5개의 기본 제공 데이터 원본 제어가 포함됩니다.
ObjectDataSource는 다른 개체로 작업하기 위한 프록시 역할을 합니다. ObjectDataSource를 구성하려면 이 기본 개체와 해당 메서드가 ObjectDataSource의 Select
, Insert
, Update
및 Delete
메서드에 매핑되는 방법을 지정합니다. 이 기본 개체가 지정되고 해당 메서드가 ObjectDataSource에 매핑되면 ObjectDataSource를 데이터 웹 컨트롤에 바인딩할 수 있습니다. ASP.NET 에는 GridView, DetailsView, RadioButtonList 및 DropDownList를 비롯한 많은 데이터 웹 컨트롤이 포함되어 있습니다. 페이지 수명 주기 동안 데이터 웹 컨트롤은 바인딩된 데이터에 액세스해야 할 수 있으며, 이는 ObjectDataSource의 Select
메서드를 호출하여 수행됩니다. 데이터 웹 컨트롤이 삽입, 업데이트 또는 삭제를 지원하는 경우 ObjectDataSource의 Insert
, Update
또는 Delete
메서드를 호출할 수 있습니다. 그런 다음 이러한 호출은 다음 다이어그램과 같이 ObjectDataSource에 의해 적절한 기본 개체의 메서드로 라우팅됩니다.
그림 2: ObjectDataSource가 프록시 역할을 합니다(전체 크기 이미지를 보려면 클릭).
ObjectDataSource를 사용하여 데이터를 삽입, 업데이트 또는 삭제하는 메서드를 호출할 수 있지만 데이터를 반환하는 데만 집중하겠습니다. 향후 자습서에서는 데이터를 수정하는 ObjectDataSource 및 데이터 웹 컨트롤을 사용하여 살펴봅니다.
1단계: ObjectDataSource 컨트롤 추가 및 구성
먼저 폴더에서 페이지를 SimpleDisplay.aspx
열고 BasicReporting
디자인 뷰로 전환한 다음 도구 상자에서 페이지의 디자인 화면으로 ObjectDataSource 컨트롤을 끌어 옵니다. ObjectDataSource는 태그를 생성하지 않기 때문에 디자인 화면에 회색 상자로 표시됩니다. 단순히 지정된 개체에서 메서드를 호출하여 데이터에 액세스합니다. ObjectDataSource에서 반환된 데이터는 GridView, DetailsView, FormView 등과 같은 데이터 웹 컨트롤에 의해 표시될 수 있습니다.
비고
또는 먼저 데이터 웹 컨트롤을 페이지에 추가한 다음 스마트 태그의 드롭다운 목록에서 새 데이터 원본< 옵션을 선택할 >수 있습니다.
ObjectDataSource의 기본 개체 및 해당 개체의 메서드가 ObjectDataSource에 매핑되는 방법을 지정하려면 ObjectDataSource의 스마트 태그에서 데이터 원본 구성 링크를 클릭합니다.
그림 3: 스마트 태그에서 Configure Data Source 링크를 클릭합니다(전체 크기 이미지를 보려면 클릭).
그러면 데이터 소스 구성 마법사가 표시됩니다. 먼저 ObjectDataSource가 작업할 개체를 지정해야 합니다. "데이터 구성 요소만 표시" 확인란을 선택하면 이 화면의 드롭다운 목록에 속성으로 DataObject
데코레이팅된 개체만 나열됩니다. 현재 목록에는 형식화된 데이터 세트의 TableAdapters와 이전 자습서에서 만든 BLL 클래스가 포함되어 있습니다. Business Logic Layer 클래스에 속성을 추가하는 DataObject
것을 잊은 경우 이 목록에 표시되지 않습니다. 이 경우 "데이터 구성 요소만 표시" 확인란의 선택을 취소하여 BLL 클래스(형식화된 데이터 세트의 다른 클래스, DataTables, DataRows 등과 함께)를 포함해야 하는 모든 개체를 봅니다.
이 첫 번째 화면의 드롭다운 목록에서 클래스를 선택하고 ProductsBLL
다음을 클릭합니다.
그림 4: ObjectDataSource 컨트롤과 함께 사용할 개체 지정(전체 크기 이미지를 보려면 클릭)
마법사의 다음 화면에서는 ObjectDataSource가 호출해야 하는 메서드를 선택하라는 메시지가 표시됩니다. 드롭다운에는 이전 화면에서 선택한 개체의 데이터를 반환하는 메서드가 나열됩니다. 여기서 우리는 , GetProductByProductID
, GetProducts
, 및 GetProductsByCategoryID
를 볼 수 있습니다GetProductsBySupplierID
.
GetProducts
드롭다운 목록에서 메서드를 선택하고 Finish를 클릭합니다(이전 자습서와 같이 의 메서드에 추가한 DataObjectMethodAttribute
ProductBLL
경우 이 옵션이 기본적으로 선택됨).
그림 5: SELECT 탭에서 데이터를 반환하는 방법 선택(전체 크기 이미지를 보려면 클릭)
수동으로 ObjectDataSource 구성
ObjectDataSource의 데이터 원본 구성 마법사는 사용하는 개체를 지정하고 호출되는 개체의 메서드를 연결하는 빠른 방법을 제공합니다. 그러나 속성 창을 통해 또는 선언적 태그에서 직접 속성을 통해 ObjectDataSource를 구성할 수 있습니다. 속성을 사용할 기본 개체의 형식으로 설정하고 데이터를 TypeName
검색할 때 호출할 메서드로 설정 SelectMethod
하기만 하면 됩니다.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetProducts" TypeName="ProductsBLL">
</asp:ObjectDataSource>
데이터 원본 구성 마법사를 선호하더라도 마법사에는 개발자가 만든 클래스만 나열되므로 ObjectDataSource를 수동으로 구성해야 하는 경우가 있을 수 있습니다. ObjectDataSource를 Membership 클래스와 같은 .NET Framework 클래스에 바인딩하여 사용자 계정 정보에 액세스하거나 파일 시스템 정보를 사용하도록 Directory 클래스를 사용하려면 ObjectDataSource의 속성을 수동으로 설정해야 합니다.
2단계: 데이터 웹 컨트롤 추가 및 ObjectDataSource에 바인딩
ObjectDataSource가 페이지에 추가되고 구성되면 페이지에 데이터 웹 컨트롤을 추가하여 ObjectDataSource의 Select
메서드에서 반환된 데이터를 표시할 준비가 된 것입니다. 모든 데이터 웹 컨트롤은 ObjectDataSource에 바인딩할 수 있습니다. GridView, DetailsView 및 FormView에 ObjectDataSource의 데이터를 표시하는 방법을 살펴보겠습니다.
GridView를 ObjectDataSource에 바인딩
도구 상자의 SimpleDisplay.aspx
GridView 컨트롤을 의 디자인 화면에 추가합니다. GridView의 스마트 태그에서 1단계에서 추가한 ObjectDataSource 컨트롤을 선택합니다. 이렇게 하면 ObjectDataSource의 Select
메서드에서 반환된 각 속성(즉, DataTable에 의해 정의된 Products 속성)에 대해 GridView에 BoundField가 자동으로 만들어집니다.
그림 6: GridView가 페이지에 추가되고 ObjectDataSource에 바인딩되었습니다(전체 크기 이미지를 보려면 클릭).
그런 다음 스마트 태그에서 열 편집 옵션을 클릭하여 GridView의 BoundFields를 사용자 지정, 다시 정렬 또는 제거할 수 있습니다.
그림 7: 열 편집 대화 상자를 통해 GridView의 BoundFields 관리(전체 크기 이미지를 보려면 클릭)
잠시 시간을 내어 GridView의 BoundFields를 수정하여 , ProductID
, SupplierID
, CategoryID
, QuantityPerUnit
UnitsInStock
, 및 UnitsOnOrder
BoundFields를 ReorderLevel
제거합니다. 왼쪽 하단의 목록에서 BoundField를 선택하고 삭제 버튼(빨간색 X)을 클릭하여 제거하기만 하면 됩니다. 다음으로, 이러한 BoundFields를 선택하고 위쪽 화살표를 클릭하여 및 CategoryName
BoundFields가 SupplierName
BoundField 앞에 오도록 UnitPrice
BoundFields를 다시 정렬합니다. 나머지 BoundFields의 HeaderText
속성을 각각 , Products
, Category
및 Supplier
로 Price
설정합니다. 그런 다음 BoundField의 Price
속성을 False로 설정하고 해당 HtmlEncode
속성을 DataFormatString
로 설정하여 BoundField의 {0:c}
통화 형식을 지정합니다. 마지막으로 를 Price
오른쪽으로 수평으로 정렬하고 Discontinued
속성을 통해 중앙의 확인란을 정렬합니다ItemStyle
/HorizontalAlign
.
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="ProductID" DataSourceID="ObjectDataSource1"
EnableViewState="False">
<Columns>
<asp:BoundField DataField="ProductName"
HeaderText="Product" SortExpression="ProductName" />
<asp:BoundField DataField="CategoryName"
HeaderText="Category" ReadOnly="True"
SortExpression="CategoryName" />
<asp:BoundField DataField="SupplierName"
HeaderText="Supplier" ReadOnly="True"
SortExpression="SupplierName" />
<asp:BoundField DataField="UnitPrice"
DataFormatString="{0:c}" HeaderText="Price"
HtmlEncode="False" SortExpression="UnitPrice">
<ItemStyle HorizontalAlign="Right" />
</asp:BoundField>
<asp:CheckBoxField DataField="Discontinued"
HeaderText="Discontinued" SortExpression="Discontinued">
<ItemStyle HorizontalAlign="Center" />
</asp:CheckBoxField>
</Columns>
</asp:GridView>
그림 8: GridView의 BoundFields가 사용자 지정되었습니다(전체 크기 이미지를 보려면 클릭).
일관된 모양을 위한 테마 사용
이러한 자습서에서는 가능한 경우 항상 외부 파일에 정의된 CSS 스타일시트를 사용하는 대신 컨트롤 수준 스타일 설정을 제거하려고 합니다. 파일에는 Styles.css
이 자습서에서 사용되는 데이터 웹 컨트롤의 모양을 지시하는 데 사용해야 하는 , DataWebControlStyle
, HeaderStyle
및 RowStyle
CSS 클래스가 포함되어 AlternatingRowStyle
있습니다. 이를 위해 GridView의 CssClass
속성을 DataWebControlStyle
로 HeaderStyle
설정하고 그에 따라 , RowStyle
, 속성의 AlternatingRowStyle
CssClass
속성을 설정할 수 있습니다.
웹 컨트롤에서 이러한 CssClass
속성을 설정하는 경우 자습서에 추가된 각 데이터 웹 컨트롤에 대해 이러한 속성 값을 명시적으로 설정해야 한다는 것을 기억해야 합니다. 보다 관리하기 쉬운 방법은 테마를 사용하여 GridView, DetailsView 및 FormView 컨트롤에 대한 기본 CSS 관련 속성을 정의하는 것입니다. 테마는 컨트롤 수준 속성 설정, 이미지 및 CSS 클래스의 컬렉션으로, 일반적인 모양과 느낌을 적용하기 위해 사이트 전체의 페이지에 적용할 수 있습니다.
테마에는 이미지나 CSS 파일이 포함되지 않지만(웹 애플리케이션의 루트 폴더에 정의된 스타일시트 Styles.css
as-is그대로 둡니다) 두 개의 스킨이 포함됩니다. 스킨은 웹 컨트롤의 기본 속성을 정의하는 파일입니다. 특히 GridView 및 DetailsView 컨트롤에 대한 스킨 파일이 있어 기본 CssClass
관련 속성을 나타냅니다.
먼저 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 새 항목 추가를 선택하여 명명된 GridView.skin
새 스킨 파일을 프로젝트에 추가합니다.
그림 9: 명명된 GridView.skin
스킨 파일 추가(전체 크기 이미지를 보려면 클릭)
스킨 파일은 폴더에 있는 테마에 배치해야 합니다 App_Themes
. 아직 이러한 폴더가 없기 때문에 Visual Studio는 첫 번째 스킨을 추가할 때 폴더를 만들도록 친절하게 제안합니다. 예를 클릭하여 폴더를 만들고 App_Theme
새 GridView.skin
파일을 여기에 넣습니다.
그림 10: Visual Studio에서 App_Theme
폴더를 만들도록 허용(전체 크기 이미지를 보려면 클릭)
그러면 스킨 파일이 App_Themes
있는 GridView라는 폴더에 새 테마 GridView.skin
가 생성됩니다.
그림 11: GridView 테마가 폴더에 추가되었습니다.App_Theme
GridView 테마의 이름을 DataWebControls로 바꿉니다(폴더의 GridView 폴더를 App_Theme
마우스 오른쪽 버튼으로 클릭하고 이름 바꾸기 선택). 다음으로, 파일에 다음 마크업을 입력합니다.GridView.skin
<asp:GridView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<HeaderStyle CssClass="HeaderStyle" />
</asp:GridView>
이렇게 하면 테마를 사용하는 모든 페이지의 GridView에 대한 관련 속성에 대한 CssClass
DataWebControls 기본 속성이 정의됩니다. 곧 사용할 데이터 웹 컨트롤인 DetailsView에 대한 다른 스킨을 추가해 보겠습니다. 명명된 DetailsView.skin
DataWebControls 테마에 새 스킨을 추가하고 다음 태그를 추가합니다.
<asp:DetailsView runat="server" CssClass="DataWebControlStyle">
<AlternatingRowStyle CssClass="AlternatingRowStyle" />
<RowStyle CssClass="RowStyle" />
<FieldHeaderStyle CssClass="HeaderStyle" />
</asp:DetailsView>
테마가 정의되면 마지막 단계는 ASP.NET 페이지에 테마를 적용하는 것입니다. 테마는 페이지별로 적용하거나 웹 사이트의 모든 페이지에 적용할 수 있습니다. 웹 사이트의 모든 페이지에 이 테마를 사용하겠습니다. 이렇게 하려면 의 Web.config
섹션에 다음 태그를 <system.web>
추가합니다.
<pages styleSheetTheme="DataWebControls" />
그게 전부입니다! 이 styleSheetTheme
설정은 테마에 지정된 속성이 컨트롤 수준에서 지정된 속성을 재정의해서는 안 됨을 나타냅니다. 테마 설정이 컨트롤 설정보다 우선하도록 지정하려면 대신 이 theme
속성을 사용하십시오. styleSheetTheme
불행히도 이 속성을 통해 theme
지정된 테마 설정은 Visual Studio 디자인 보기에 나타나지 않습니다. 테마 및 스킨에 대한 자세한 내용은 ASP.NET Themes and Skins Overview 및 Server-Side Styles Using Themes를 참조하십시오 . 테마를 사용하도록 페이지를 구성하는 방법에 대한 자세한 내용은 방법: ASP.NET 테마 적용을 참조하십시오.
그림 12: GridView에 제품의 이름, 범주, 공급업체, 가격 및 중단된 정보가 표시됩니다(전체 크기 이미지를 보려면 클릭).
DetailsView에서 한 번에 하나의 레코드 표시
GridView는 바인딩된 데이터 원본 컨트롤에서 반환된 각 레코드에 대해 하나의 행을 표시합니다. 그러나 단일 레코드 또는 한 번에 하나의 레코드만 표시하려는 경우가 있습니다.
DetailsView 컨트롤은 이 기능을 제공하여 컨트롤에 바인딩된 각 열 또는 속성에 대해 두 개의 열과 하나의 행이 있는 HTML <table>
로 렌더링합니다. DetailsView는 단일 레코드가 90도 회전된 GridView로 생각할 수 있습니다.
먼저 의 GridView SimpleDisplay.aspx
DetailsView 컨트롤을 추가합니다. 다음으로, GridView와 동일한 ObjectDataSource 컨트롤에 바인딩합니다. GridView와 마찬가지로 ObjectDataSource의 Select
메서드에서 반환된 개체의 각 속성에 대한 DetailsView에 BoundField가 추가됩니다. 유일한 차이점은 DetailsView의 BoundFields가 세로가 아닌 가로로 배치된다는 것입니다.
그림 13: 페이지에 DetailsView를 추가하고 ObjectDataSource에 바인딩(전체 크기 이미지를 보려면 클릭)
GridView와 마찬가지로 DetailsView의 BoundFields를 조정하여 ObjectDataSource에서 반환된 데이터를 보다 사용자 지정한 표시를 제공할 수 있습니다. 그림 14는 GridView 예제와 유사한 모양을 만들도록 BoundFields 및 CssClass
속성을 구성한 후의 DetailsView를 보여줍니다.
그림 14: DetailsView에 단일 레코드가 표시됩니다(전체 크기 이미지를 보려면 클릭).
DetailsView는 데이터 소스에서 반환된 첫 번째 레코드만 표시합니다. 사용자가 한 번에 하나씩 모든 레코드를 단계별로 실행할 수 있도록 하려면 DetailsView에 대한 페이징을 사용하도록 설정해야 합니다. 이렇게 하려면 Visual Studio로 돌아가서 DetailsView의 스마트 태그에서 페이징 사용 확인란을 선택합니다.
그림 15: DetailsView 컨트롤에서 페이징 사용(전체 크기 이미지를 보려면 클릭)
그림 16: 페이징을 사용하도록 설정하면 DetailsView를 통해 사용자가 제품을 볼 수 있습니다(전체 크기 이미지를 보려면 클릭).
페이징에 대해서는 향후 자습서에서 자세히 설명하겠습니다.
한 번에 하나의 레코드를 표시하기 위한 보다 유연한 레이아웃
DetailsView는 ObjectDataSource에서 반환된 각 레코드를 표시하는 방법이 매우 엄격합니다. 데이터에 대한 보다 유연한 보기가 필요할 수 있습니다. 예를 들어 제품 이름, 범주, 공급업체, 가격 및 단종 정보를 각각 별도의 행에 표시하는 대신 제품 이름과 가격을 제목에 <h4>
표시하고 범주 및 공급업체 정보를 이름 및 가격 아래에 더 작은 글꼴 크기로 표시할 수 있습니다. 또한 값 옆에 속성 이름(Product, Category 등)을 표시하는 데 신경 쓰지 않을 수도 있습니다.
FormView 컨트롤은 이러한 수준의 사용자 지정을 제공합니다. FormView는 GridView 및 DetailsView와 같은 필드를 사용하는 대신 웹 컨트롤, 정적 HTML 및 데이터 바인딩 구문을 혼합할 수 있는 템플릿을 사용합니다. ASP.NET 1.x의 Repeater 컨트롤에 익숙한 경우 FormView를 단일 레코드를 표시하기 위한 Repeater로 생각할 수 있습니다.
페이지의 디자인 화면에 FormView 컨트롤을 SimpleDisplay.aspx
추가합니다. 처음에 FormView는 회색 블록으로 표시되어 최소한 컨트롤의 ItemTemplate
.
그림 17: FormView에는 (ItemTemplate
)이 포함되어야 합니다.
FormView의 스마트 태그를 통해 FormView를 데이터 소스 컨트롤에 직접 바인딩할 수 있으며, 이 경우 기본값 ItemTemplate
이 자동으로 생성됩니다(ObjectDataSource 컨트롤의 EditItemTemplate
및 InsertItemTemplate
속성이 설정된 경우 및 InsertMethod
와 함께UpdateMethod
). 그러나 이 예제에서는 데이터를 FormView에 바인딩하고 수동으로 지정 ItemTemplate
해 보겠습니다. 먼저 FormView의 DataSourceID
속성을 ID
ObjectDataSource 컨트롤의 속성으로 ObjectDataSource1
설정합니다. 다음으로, 요소에 ItemTemplate
제품 이름과 가격을 <h4>
표시하고 그 아래에 있는 범주 및 운송업체 이름을 더 작은 글꼴 크기로 표시하도록 만듭니다.
<asp:FormView ID="FormView1" runat="server"
DataSourceID="ObjectDataSource1" EnableViewState="False">
<ItemTemplate>
<h4><%# Eval("ProductName") %>
(<%# Eval("UnitPrice", "{0:c}") %>)</h4>
Category: <%# Eval("CategoryName") %>;
Supplier: <%# Eval("SupplierName") %>
</ItemTemplate>
</asp:FormView>
그림 18: 첫 번째 제품(Chai)이 사용자 지정 형식으로 표시됩니다(전체 크기 이미지를 보려면 클릭).
는 <%# Eval(propertyName) %>
데이터 바인딩 구문입니다. 이 Eval
메서드는 FormView 컨트롤에 바인딩되는 현재 개체에 대해 지정된 속성의 값을 반환합니다. 데이터 바인딩에 대한 자세한 내용은 Alex Homer의 기사 Simplified and Extended Data Binding Syntax in ASP.NET 2.0을 참조하십시오.
DetailsView와 마찬가지로 FormView는 ObjectDataSource에서 반환된 첫 번째 레코드만 표시합니다. FormView에서 페이징을 활성화하여 방문자가 한 번에 하나씩 제품을 단계별로 실행할 수 있도록 할 수 있습니다.
요약
비즈니스 논리 계층에서 데이터를 액세스하고 표시하는 작업은 ASP.NET 2.0의 ObjectDataSource 컨트롤 덕분에 한 줄의 코드를 작성하지 않고도 수행할 수 있습니다. ObjectDataSource는 클래스의 지정된 메서드를 호출하고 결과를 반환합니다. 이러한 결과는 ObjectDataSource에 바인딩된 데이터 웹 컨트롤에 표시할 수 있습니다. 이 자습서에서는 GridView, DetailsView 및 FormView 컨트롤을 ObjectDataSource에 바인딩하는 방법을 살펴보았습니다.
지금까지는 ObjectDataSource를 사용하여 매개 변수가 없는 메서드를 호출하는 방법만 살펴보았지만 ProductBLL
클래스의 GetProductsByCategoryID(categoryID)
? 하나 이상의 매개 변수가 필요한 메서드를 호출하려면 이러한 매개 변수의 값을 지정하도록 ObjectDataSource를 구성해야 합니다.
다음 튜토리얼에서 이 작업을 수행하는 방법을 살펴보겠습니다.
행복한 프로그래밍!
추가 읽기
이 자습서에서 설명하는 항목에 대한 자세한 내용은 다음 리소스를 참조하세요.
- 사용자 고유의 데이터 원본 컨트롤 만들기
- ASP.NET 2.0의 GridView 예제
- ASP.NET 2.0의 테마
- 테마를 사용하여 스타일Server-Side
- 방법: 프로그래밍 방식으로 ASP.NET 테마 적용
작성자 정보
7개의 ASP/ASP.NET 책의 저자이자 4GuysFromRolla.com 창립자인 Scott Mitchell은 1998년부터 Microsoft 웹 기술을 연구해 왔습니다. Scott은 독립 컨설턴트, 트레이너 및 작가로 일합니다. 그의 최신 책은 Sams Teach Yourself ASP.NET 2.0 in 24 Hours입니다. 그에게 mitchell@4GuysFromRolla.com으로 연락할 수 있습니다.
특별히 감사드립니다.
이 자습서 시리즈는 많은 유용한 검토자가 검토했습니다. 이 자습서의 수석 검토자는 Hilton Giesenow였습니다. 예정된 MSDN 문서를 검토하는 데 관심이 있으신가요? 그렇다면 mitchell@4GuysFromRolla.com으로 메시지를 보내 주세요.