다음을 통해 공유


메서드 만들기 및 보기 만들기 추가

작성 자: Scott Hanselman

이 자습서에서는 ASP.NET MVC의 기본 사항을 소개합니다. 데이터베이스에서 읽고 쓰는 간단한 웹 애플리케이션을 만듭니다. 다른 ASP.NET MVC 자습서 및 샘플을 찾으려면 ASP.NET MVC 학습 센터를 방문하세요.

이 섹션에서는 사용자가 데이터베이스에서 새 영화를 만들 수 있도록 하는 데 필요한 지원을 구현합니다. /Movies/CREATE URL 작업을 구현하여 이 작업을 수행합니다.

/Movies/Create URL 구현은 2단계 프로세스입니다. 사용자가 /Movies/Create URL을 처음 방문할 때 새 영화를 입력하기 위해 입력할 수 있는 HTML 양식을 표시하려고 합니다. 그런 다음 사용자가 양식을 제출하고 데이터를 서버에 다시 게시할 때 게시된 콘텐츠를 검색하여 데이터베이스에 저장하려고 합니다.

MoviesController 클래스 내에서 두 개의 Create() 메서드 내에서 이러한 두 단계를 구현합니다. 한 메서드는 사용자가 새 동영상을 만들기 위해 작성해야 하는 양식을> 표시<합니다. 두 번째 메서드는 사용자가 양식을> 서버에 다시 제출할 <때 게시된 데이터 처리를 처리하고 데이터베이스 내에 새 Movie를 저장합니다.

다음은 이 구현을 위해 MoviesController 클래스에 추가할 코드입니다.

public ActionResult Create()
{
    return View();
}

[HttpPost]
public ActionResult Create(Movie newMovie)
{

    if (ModelState.IsValid)
    {
        db.AddToMovies(newMovie);
        db.SaveChanges();

        return RedirectToAction("Index");
    }
    else
    {
        return View(newMovie);
    }
}

위의 코드에는 컨트롤러 내에서 필요한 모든 코드가 포함되어 있습니다.

이제 사용자에게 양식을 표시하는 데 사용할 보기 만들기 템플릿을 구현해 보겠습니다. 첫 번째 만들기 메서드를 마우스 오른쪽 단추로 클릭하고 "보기 추가"를 선택하여 영화 양식에 대한 보기 템플릿을 만듭니다.

뷰 템플릿에 "Movie"를 뷰 데이터 클래스로 전달하고 "만들기" 템플릿을 "스캐폴드"하려는 경우를 선택합니다.

보기 추가

추가 단추를 클릭하면 \Movies\Create.aspx 보기 템플릿이 만들어집니다. "콘텐츠 보기" 드롭다운에서 "만들기"를 선택했기 때문에 보기 추가 대화 상자는 자동으로 일부 기본 콘텐츠를 "스캐폴드"합니다. 스캐폴딩은 HTML <양식>, 유효성 검사 오류 메시지의 위치를 만들었으며, 스캐폴딩은 Movies에 대해 알고 있으므로 클래스의 각 속성에 대해 Label 및 Fields를 만들었습니다.

<% using (Html.BeginForm()) {%>
    <%: Html.ValidationSummary(true) %>

    <fieldset>
        <legend>Fields</legend>
       
        <div class="editor-label">
            <%: Html.LabelFor(model => model.Id) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Id) %>
            <%: Html.ValidationMessageFor(model => model.Id) %>
        </div>
       
        <div class="editor-label">
            <%: Html.LabelFor(model => model.Title) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Title) %>
            <%: Html.ValidationMessageFor(model => model.Title) %>
        </div>
       
        <div class="editor-label">
            <%: Html.LabelFor(model => model.ReleaseDate) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.ReleaseDate) %>
            <%: Html.ValidationMessageFor(model => model.ReleaseDate) %>
        </div>
       
        <div class="editor-label">
            <%: Html.LabelFor(model => model.Genre) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Genre) %>
            <%: Html.ValidationMessageFor(model => model.Genre) %>
        </div>
       
        <div class="editor-label">
            <%: Html.LabelFor(model => model.Price) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Price) %>
            <%: Html.ValidationMessageFor(model => model.Price) %>
        </div>
       
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>

<% } %>

데이터베이스는 동영상에 ID를 자동으로 제공하므로 모델을 참조하는 필드를 제거해 보겠습니다. 보기 만들기의 ID입니다. 범례 필드</범>례>뒤<의 7줄은 원하지 않는 ID 필드를 표시하므로 제거합니다.

이제 새 동영상을 만들어 데이터베이스에 추가해 보겠습니다. 애플리케이션을 다시 실행하고 "/Movies" URL을 방문하여 "만들기" 링크를 클릭하여 새 동영상을 추가합니다.

만들기 - Windows 인터넷 Explorer

만들기 단추를 클릭하면 이 양식의 데이터를 방금 만든 /Movies/Create 메서드에 다시 게시합니다(HTTP POST를 통해). 시스템이 URL에서 자동으로 "numTimes" 및 "name " 매개 변수를 가져와서 메서드의 매개 변수에 매핑한 경우와 마찬가지로 시스템은 자동으로 POST에서 양식 필드를 가져와 개체에 매핑합니다. 이 경우 "ReleaseDate" 및 "Title"과 같은 HTML 필드의 값은 자동으로 Movie의 새 instance 올바른 속성에 배치됩니다.

MoviesController의 두 번째 Create 메서드를 다시 살펴보겠습니다. "Movie" 개체를 인수로 사용하는 방법을 확인합니다.

[HttpPost]
public ActionResult Create(Movie newMovie)
{
    if (ModelState.IsValid)
    {
        db.AddToMovies(newMovie);
        db.SaveChanges();

        return RedirectToAction("Index");
    }
    else
    {
        return View(newMovie);
    }
}

그런 다음 이 Movie 개체를 Create 작업 메서드의 [HttpPost] 버전으로 전달하고 데이터베이스에 저장한 다음 사용자를 영화 목록에 저장된 결과를 표시하는 Index() 작업 메서드로 다시 리디렉션했습니다.

동영상 목록 - Windows 인터넷 Explorer

하지만 영화가 올바른지 확인하지 않으며 데이터베이스에서 타이틀 없이 영화를 저장할 수 없습니다. 데이터베이스가 오류를 throw하기 전에 사용자에게 알릴 수 있다면 좋을 것입니다. 다음에 애플리케이션에 유효성 검사 지원을 추가하여 이 작업을 수행합니다.