ASP.NET MVC(C#)으로 15분만에 영화 데이터베이스 애플리케이션 생성하기(4) General .NET2009/11/20 02:00
데이터베이스 레코드 목록 보기
Home 컨트롤러의 Index() 메서드는 ASP.NET MVC 애플리케이션을 위한 기본 메서드 입니다. ASP.NET MVC 애플리케이션을 실행할 때 Index() 메서드가 호출하는 첫 컨트롤러 메서드 입니다.
public ActionResult Index()
{
return View();
}
HomeController는 Listring 2에서 보는 것 처럼 _db라는 이름을 가지는 새로운 Private field를 가지는 코드로 수정하였습니다.
MoviesDBEntities 클래스는 데이터베이스 모델을 표현하고 통신하기 위한 클래스로 사용되기 때문에 Index() 역시 수정하였습다. Index() 메서드는 Movies 데이터베이스 테이블의 모든 movie 기록들을 가져오고 그러기 위해 MoviesDBEntities 클래스를 사용합니다. _db.MovieSet.ToList()는 Movies 데이터베이스 테이블의 movie 기록 모두를 반환하도록 합니다.
이러한 Movies의 목록은 view를 통해서 보여줍니다. 따라서 그것이 무엇이든간에 View()는 어떤 view data라도 보여줄 수 있는 기능을 제공합니다.
[Listring 2]
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using MoveApp.Models;
{
public class HomeController : Controller
{
private MoviesDBEntities _db = new Models.MoviesDBEntities();
public ActionResult Index()
{
return View(_db.MovieSet.ToList());
}
Index() 메서드는 Index라는 이름의 view를 반환합니다. 우리는 movie 데이터베이스 레코드 리스트를 보여주기 위해 view를 생성할 필요가 있습니다.
그것의 절차는 다음과 같습니다.
Add New 다이얼로그가 오픈되기 전이나 View data class 드롭다운 리스트 내에 클래스가 나타나지 않을 때 메뉴 옵션의 Build, Build Solution을 선택해서 프로젝트를 빌드해야만 합니다.
1. 코드 편집기에서 Index() 메서드를 우클릭하고 메뉴 옵션에서 Add View를 선택합니다.
2. Add View 다이얼로그에서 Create a strongly-typed view를 체크합니다.
3. View Content 드롭다운 리스트에서 List의 값을 선택합니다.
4. View data class 드롭다운 리스트에서 MovieApp.Models.Movie를 선택합니다.
(그림 9: 컨트롤러 action에 하나의 뷰를 추가하기)
Index view는 HTML 테이블 내에 Movies 데이터베이스 테이블의 모든 movie 기록을 보여줍니다. view는 ViewData.Model 프로퍼티에 의해 각각의 movie를 표현하는 이터레이터와 foreach 루프를 포함하고 있습니다. F5키를 눌러서 애플리케이션을 실행하고 렌더링 된 화면을 확인합니다.
새로운 데이터베이스 레코드 생성하기
Index는 이전 섹션에서 새로운 데이터베이스 레코드 생성을 위해 링크를 포함하여 뷰를 생성하는 것을 보여주었습니다. 새로운 데이터베이스 레코드 생성을 위해선 로직을 먼저 만들고 즉시 뷰를 생성해야 합니다.
Home 컨트롤러는 Create()라는 2개의 메서드를 포함하고 있습니다.
첫번째 Create() 메서드는 파라미터를 가지고 있지 않다. Create() 메서드의 오버로드는 새롭게 생성된 movie 데이터베이스 레코드를 HTML 폼에서 보여주기 위해 사용됩니다.
두번째 Create() 메서드는 FormCollection 파라미터를 가지고 있습니다. 이 Create() 메서드 오버로드는 서버에 포스트된 새로운 movie를 생성하고 HTML이 조직화 될 때 호출됩니다. 두번째 Create() 메서드의 주의할 점은 HTTP POST 조작 이행을 제외한 그 이전에 호출되는 메서드인 AcceptsVerbs 애트리뷰트를 가진다는 것 입니다. 이 두번째 Create() 메서드는 Listing 4에서 보는 것 처럼 HomeController 클래스가 수정되어 있습니다. Create() 메서드의 새버전은 Movie 데이터베이스 테이블에 새로운 movie를 포함하는 로직을 포함하고 Movie 파라미터를 받아들입니다.
Bind 애트리뷰트를 주의하라. 왜냐하면 우리는 HTML 폼에서 Movie ID 프로퍼티를 업데이트 하지 않기를 원한다. 이 프로퍼티는 매우 필요하기 때문이다
Listing 4 – Controllers\HomeControllers.cs(modified Create method)
//
// GET: /Home/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Home/Create
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="Id")] Movie movieToCreate)
{
if (!ModelState.IsValid)
return View();
_db.AddToMovieSet(movieToCreate);
_db.SaveChanges();
return RedirectToAction("Index");
}
Visual Studio는 하나의 새로운 movie 데이터베이스 레코드(그림 12를 보라.)를 생성하는 폼으로 쉽게 만들 수 있습니다. 다음의 절차를 따라하세요.
1. 코드 편집기에서 Create() 메서드를 우클릭하고 메뉴 옵션에서 Add View를 선택한다.
2. Create a strongly-typed view를 체크한다.
3. View content 드롭다운 리스트에서 값으로 create를 선택한다.
4. View data class 드롭다운 리스트에서 MovieApp.Models.Movie를 선택한다.
5. Add 버튼을 클릭해서 새로운 뷰를 생성한다.
(그림 12: Create 뷰 추가하기)
|
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MoveApp.Models.Movie>" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <h2>Create</h2> <%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %> <% using (Html.BeginForm()) {%> <fieldset> <% } %> <div> </asp:Content>
|
HTML 폼에 Id 폼 필드가 Add View 다이얼로그에 의해 추가된다. 왜냐하면 Id 컬럼은 독립적인 컬럼입니다. 여기서 이 폼 필드는 필요가 없으므로 안전하게 삭제할 수 있습니다.
Create 뷰가 추가된 후에 데이터베이스에 새로운 Movie 레코드를 추가할 수 있습니다. F5키를 이용해서 애플리케이션을 실행하면 그림 13의 폼에서 보이는 것처럼 새로운 링크가 보이고 클릭할 수 있습니다. 폼 전송이 완벽하다면 새로운 데이터베이스 레코드가 생성됩니다. 자동적으로 폼 벨리데이션을 얻을 수 있는 것에 주의하세요. 만약 movie의 릴리지 시간이나 잘못된 릴리즈 데이터를 입력하면 아래의 그림에서 보는 것처럼 하이라이트 처리된 데이터 필드를 표현할 것이다.
(그림 13: 새로운 movie 데이터베이스 레코드를 생성하는 것)
기존 데이터베이스 레코드 수정하기
앞 섹션에서 우리는 새로운 데이터베이스 레코드의 목록과 생성을 어떻게 하는지 알아 보았습니다. 마지막 섹션에서는 기존의 데이터베이스 레코드를 어떻게 수정하는지 알아 보겠습니다.
첫번째로 우리는 하나의 수정 폼을 추가할 것 입니다. 이 절차는 Visual Studio로 하면 쉽고 자동적으로 수정 폼을 추가할 수 있습니다. Visual Studio 코드 편집기 내에서 HomeController.cs.class 파일을 열고 다음의 절차를 수행하세요.
1. 코드 편집기 내의 Edit() 메서드에서 우클릭하고 메뉴 옵션에서 Add View를 선택한다.(그림 14를 볼 것.)
2. Create a strongly-typed view를 체크해라.
3. View content 드롭다운 리스트에서 값을 Edit 를 선택한다.
4. View data class 드롭다운 리스트에서 MoieApp.Models.Movie 값을 선택한다.
5. Add 버튼을 클릭하여 새로운 뷰를 생성한다.
Views\Home 폴더 내에 Edit.aspx라는 이름의 새로운 뷰를 추가한다. 이 뷰는 movie 레코드 수정을 위한 HTML 폼이 포함되어 있습니다.
(그림 14: Edit View 추가하기)
Edit 뷰는 Movie Id 프로퍼티가 조합된 HTML 폼 필드를 포함하고 있다. Id 프로퍼티의 값을 수정해서는 안된다. 따라서 폼 필드에서 삭제해야만 한다.
마지막으로 우리는 데이터베이스 레코드 수정을 지원하기 위해 Home Controller를 수정할 필요가 있습니다. HomeController는 Listing 6에 포함된 클래스처럼 수정되었습니다.
| // // GET: /Home/Edit/5 public ActionResult Edit(int id) { var movieToEdit = (from m in _db.MovieSet return View(movieToEdit); } // var originalMovie = (from m in _db.MovieSet where m.Id == movieToEdit.Id if (!ModelState.IsValid) _db.ApplyPropertyChanges(originalMovie.EntityKey.EntitySetName, movieToEdit); |
Listing 6에서 로직 양쪽에 Edit() 메서드 오버라이드를 추가 했습니다. 첫번째 Edit() 메서드는 Id 파라미터를 전달받은 메서드에 의해 movie 데이터베이스 레코드를 반환합니다. 두번째 오버로드는 movie 레코드 업데이트에 영향을 끼칩니다. 기존의 movie를 업데이트 하기 위해 ApplyPropertyChanges()를 호출하고 나서 원본 movie를 찾아와야 합니다.
Summary
이 튜터리얼의 목적은 ASP.NET MVC 애플리케이션 제작을 위한 경험을 주는 겁니다. 이 경험을 통해 ASP or ASP.NET 애플리케이션 제작 경험을 가진 사람이 ASP.NET MVC 애플리케이션을 제작하는 것이 매우 간단한 일임을 발견했기를 희망합니다. 이 튜터리얼에서 우리는 ASP.NET MVC 프레임워크의 대부분의 기본적인 특징을 조사했습니다. 이후의 튜터리얼에서는 컨트롤러 액션, 뷰, 뷰 데이터, 그리고 HTML 헬퍼와 같은 토픽을 다뤄볼 것입니다.
'General .NET' 카테고리의 다른 글
| MIME Type of Office (0) | 2010/12/09 |
|---|---|
| AJAX + ASP.NET (1) | 2010/06/28 |
| ASP.NET MVC(C#)으로 15분만에 영화 데이터베이스 애플리케이션 생성하기(4) (0) | 2009/11/20 |
| ASP.NET MVC(C#)으로 15분만에 영화 데이터베이스 애플리케이션 생성하기(3) (0) | 2009/11/19 |
| ASP.NET MVC(C#)으로 15분만에 영화 데이터베이스 애플리케이션 생성하기(2) (0) | 2009/11/18 |
| ASP.NET MVC(C#)으로 15분만에 영화 데이터베이스 애플리케이션 생성하기(1) (2) | 2009/11/17 |
