다음을 통해 공유


보기 템플릿을 사용하여 컨트롤러에서 모델의 데이터에 액세스

작성자 : Rick Anderson

참고

이 자습서의 업데이트된 버전은 ASP.NET MVC 5 및 Visual Studio 2013 사용하는 여기에서 사용할 수 있습니다. 더 안전하고 따라하기가 훨씬 더 간단하며 더 많은 기능을 보여 줍니다.

이 섹션에서는 새 MoviesController 클래스를 만들고 동영상 데이터를 검색하고 보기 템플릿을 사용하여 브라우저에 표시하는 코드를 작성합니다.

다음 단계로 진행하기 전에 애플리케이션을 빌드합니다.

Controllers 폴더를 마우스 오른쪽 단추로 클릭하고 새 MoviesController 컨트롤러를 만듭니다. 아래 옵션은 애플리케이션을 빌드할 때까지 표시되지 않습니다. 다음 옵션을 선택합니다.

  • 컨트롤러 이름: MoviesController. (기본값입니다. )
  • 템플릿: Entity Framework를 사용하여 읽기/쓰기 작업 및 뷰가 있는 MVC 컨트롤러입니다.
  • 모델 클래스: Movie(MvcMovie.Models).
  • 데이터 컨텍스트 클래스: MovieDBContext(MvcMovie.Models).
  • 보기: Razor(CSHTML). (기본값)

AddScaffoldedMovieController

추가를 클릭합니다. Visual Studio Express 다음 파일 및 폴더를 만듭니다.

  • 프로젝트의 Controllers 폴더에 있는 MoviesController.cs 파일입니다.
  • 프로젝트의 Views 폴더에 있는 Movies 폴더입니다.
  • Views\Movies 폴더에서 Create.cshtml, Delete.cshtml, Details.cshtml, Edit.cshtmlIndex.cshtml을 만듭니다.

ASP.NET MVC 4는 자동으로 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업 메서드 및 뷰를 만들었습니다(CRUD 작업 메서드 및 뷰의 자동 생성을 스캐폴딩이라고 함). 이제 동영상 항목을 만들고, 나열하고, 편집하고, 삭제할 수 있는 완벽하게 작동하는 웹 애플리케이션이 있습니다.

애플리케이션을 실행하고 브라우저의 Movies 주소 표시줄에 있는 URL에 /Movies 를 추가하여 컨트롤러로 이동합니다. 애플리케이션이 기본 라우팅(Global.asax 파일에 정의됨)을 사용하므로 브라우저 요청 http://localhost:xxxxx/Movies 은 컨트롤러의 Movies 기본 Index 작업 메서드로 라우팅됩니다. 즉, 브라우저 요청은 브라우저 요청 http://localhost:xxxxx/Movieshttp://localhost:xxxxx/Movies/Index과 사실상 동일합니다. 아직 추가하지 않았기 때문에 결과는 빈 영화 목록입니다.

M VC 동영상 인덱스 페이지를 보여 주는 스크린샷.

동영상 만들기

새로 만들기 링크를 선택합니다. 동영상에 대한 세부 정보를 입력한 다음 만들기 단추를 클릭합니다.

M VC 동영상 만들기 페이지를 보여 주는 스크린샷

만들기 단추를 클릭하면 폼이 서버에 게시되고 여기서 영화 정보가 데이터베이스에 저장됩니다. 그런 다음 목록에서 새로 만든 영화를 볼 수 있는 /Movies URL로 리디렉션됩니다.

IndexWhenHarryMet

나머지 몇 개의 동영상 항목을 만듭니다. 모두 작동하는 편집, 세부 정보삭제 링크를 사용해 봅니다.

생성된 코드 검사

Controllers\MoviesController.cs 파일을 열고 생성된 Index 메서드를 검사합니다. 메서드를 사용하는 영화 컨트롤러 Index 의 일부가 아래에 나와 있습니다.

public class MoviesController : Controller
{
    private MovieDBContext db = new MovieDBContext();

    //
    // GET: /Movies/

    public ActionResult Index()
    {
        return View(db.Movies.ToList());
    }

클래스의 MoviesController 다음 줄은 앞에서 설명한 대로 동영상 데이터베이스 컨텍스트를 인스턴스화합니다. 동영상 데이터베이스 컨텍스트를 사용하여 영화를 쿼리, 편집 및 삭제할 수 있습니다.

private MovieDBContext db = new MovieDBContext();

컨트롤러에 대한 요청은 Movies 영화 데이터베이스의 테이블에 있는 Movies 모든 항목을 반환한 다음 결과를 보기에 Index 전달합니다.

강력한 형식의 모델 및 @model 키워드

이 자습서의 앞부분에서는 컨트롤러가 개체를 사용하여 ViewBag 데이터 또는 개체를 뷰 템플릿에 전달하는 방법을 살펴보셨습니다. 는 ViewBag 보기에 정보를 전달하는 편리한 런타임에 바인딩된 방법을 제공하는 동적 개체입니다.

ASP.NET MVC는 강력한 형식의 데이터 또는 개체를 뷰 템플릿에 전달하는 기능도 제공합니다. 이 강력한 형식의 접근 방식을 사용하면 Visual Studio 편집기에서 코드를 더 효율적으로 컴파일하고 다양한 IntelliSense를 확인할 수 있습니다. Visual Studio의 스캐폴딩 메커니즘은 메서드 및 뷰를 MoviesController 만들 때 클래스 및 뷰 템플릿과 함께 이 방법을 사용했습니다.

Controllers\MoviesController.cs 파일에서 생성된 Details 메서드를 검사합니다. 메서드를 사용하는 영화 컨트롤러 Details 의 일부가 아래에 나와 있습니다.

public ActionResult Details(int id = 0)
{
    Movie movie = db.Movies.Find(id);
    if (movie == null)
    {
        return HttpNotFound();
    }
    return View(movie);
}

Movie 발견되면 모델의 instance Movie 세부 정보 보기로 전달됩니다. Views\Movies\Details.cshtml 파일의 내용을 검사합니다.

뷰 템플릿 파일의 맨 위에 문을 포함 @model 하면 뷰에 필요한 개체의 형식을 지정할 수 있습니다. 영화 컨트롤러를 만들 때 Visual Studio에서는 Details.cshtml 파일의 맨 위에 다음 @model 문을 자동으로 포함했습니다.

@model MvcMovie.Models.Movie

@model 지시문을 사용하면 강력한 형식인 Model 개체를 사용하여 컨트롤러가 뷰에 전달된 영화에 액세스할 수 있습니다. 예를 들어 Details.cshtml 템플릿에서 코드는 강력한 형식 Model 의 개체를 사용하여 DisplayNameFor 각 동영상 필드를 및 DisplayFor HTML 도우미에 전달합니다. 만들기 및 편집 메서드 및 보기 템플릿도 영화 모델 개체를 전달합니다.

MoviesController.cs 파일에서 Index.cshtml 보기 템플릿 및 Index 메서드를 검사합니다. 코드가 작업 메서드에서 도우미 메서드 IndexList 호출할 때 개체를 View 만드는 방법을 확인합니다. 그런 다음 코드는 컨트롤러에서 보기로 이 Movies 목록을 전달합니다.

public ActionResult Index()
{
    return View(db.Movies.ToList());
}

영화 컨트롤러를 만들 때 Visual Studio Express Index.cshtml 파일의 맨 위에 다음 @model 문을 자동으로 포함했습니다.

@model IEnumerable<MvcMovie.Models.Movie>

@model 지시문을 사용하면 강력한 형식의 개체를 사용하여 Model 컨트롤러가 보기에 전달한 영화 목록에 액세스할 수 있습니다. 예를 들어 Index.cshtml 템플릿에서 코드는 강력한 형식 Model 의 개체에 대해 문을 수행 foreach 하여 영화를 반복합니다.

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Title)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ReleaseDate)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Genre)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Price)
        </td>
         <th>
            @Html.DisplayFor(modelItem => item.Rating)
        </th>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", { id=item.ID })  |
            @Html.ActionLink("Delete", "Delete", { id=item.ID }) 
        </td>
    </tr>
}

개체는 Model 강력한 형식(개체) IEnumerable<Movie> 이므로 루프의 각 item 개체는 로 Movie입력됩니다. 다른 이점 중에서 코드 편집기에서 코드를 컴파일 시간 검사하고 전체 IntelliSense 지원을 받을 수 있음을 의미합니다.

ModelIntelliSense

SQL Server LocalDB 사용

Entity Framework Code 먼저 제공된 데이터베이스 연결 문자열이 아직 존재하지 않는 데이터베이스를 Movies 가리키는 것을 감지했기 때문에 Code First는 데이터베이스를 자동으로 만들었습니다. App_Data 폴더를 확인하여 생성되었는지 확인할 수 있습니다. Movies.mdf 파일이 표시되지 않으면 솔루션 탐색기 도구 모음에서 모든 파일 표시 단추를 클릭하고 새로 고침 단추를 클릭한 다음 App_Data 폴더를 확장합니다.

솔루션 탐색기 창을 보여 주는 스크린샷 모든 파일 표시 아이콘이 빨간색으로 원을 그리며 App Data 폴더가 선택됩니다.

Movies.mdf를 두 번 클릭하여 데이터베이스 탐색기를 연 다음 Tables 폴더를 확장하여 Movies 테이블을 표시합니다.

DB_explorer

참고

데이터베이스 탐색기가 표시되지 않으면 도구 메뉴에서 데이터베이스에 연결을 선택한 다음 데이터 원본 선택 대화 상자를 취소합니다. 이렇게 하면 데이터베이스 탐색기가 강제로 열립니다.

참고

VWD 또는 Visual Studio 2010을 사용하는 경우 다음 중 것과 유사한 오류가 발생합니다.

  • 데이터베이스 'C:\Webs\MVC4\MVCMOVIE\MVCMOVIE\APP_DATA\MOVIES. MDF'는 버전 706이므로 열 수 없습니다. 이 서버는 버전 655 이하를 지원합니다. 다운그레이드는 지원되지 않습니다.
  • "사용자 코드에서 InvalidOperation 예외를 처리하지 않았습니다." 제공된 SqlConnection은 초기 카탈로그를 지정하지 않습니다.

SQL Server Data ToolsLocalDB를 설치해야 합니다. MovieDBContext 이전 페이지에 지정된 연결 문자열을 확인합니다.

테이블을 마우스 오른쪽 단추로 Movies 클릭하고 테이블 데이터 표시 를 선택하여 만든 데이터를 확인합니다.

d b o dot Movies Data 탭을 보여 주는 스크린샷.

테이블을 마우스 오른쪽 단추로 Movies 클릭하고 테이블 정의 열기 를 선택하여 Entity Framework Code가 처음 만든 테이블 구조를 확인합니다.

데이터베이스 Explorer 창을 보여 주는 스크린샷 영화 오른쪽 클릭 메뉴에서 테이블 정의 열기가 선택됩니다.

d b o dot Movies 탭과 아래의 Entity Framework Code를 보여 주는 스크린샷.

테이블의 스키마가 Movies 이전에 만든 클래스에 매핑되는 Movie 방식을 확인합니다. Entity Framework Code 먼저 클래스에 Movie 따라 이 스키마를 자동으로 만들었습니다.

완료되면 MovieDBContext 를 마우스 오른쪽 단추로 클릭하고 연결 닫기를 선택하여 연결을 닫습니다. 연결을 닫지 않으면 다음에 프로젝트를 실행할 때 오류가 발생할 수 있습니다.

데이터베이스 Explorer 창을 보여 주는 스크린샷 영화 D B 컨텍스트 오른쪽 클릭 메뉴에서 연결 닫기를 선택합니다.

이제 데이터베이스와 해당 데이터베이스의 콘텐츠를 표시하는 간단한 목록 페이지가 있습니다. 다음 자습서에서는 스캐폴드된 코드의 나머지 부분을 검사하고 이 데이터베이스에서 영화를 검색할 수 있는 메서드와 SearchIndex 뷰를 추가 SearchIndex 합니다.