다음을 통해 공유


보기 추가(VB)

작성자: Rick Anderson

이 자습서에서는 Microsoft Visual Studio의 무료 버전인 Microsoft Visual Web Developer 2010 Express Service Pack 1을 사용하여 ASP.NET MVC 웹 애플리케이션을 빌드하는 기본 사항을 설명합니다. 시작하기 전에 아래에 나열된 필수 구성 요소를 설치했는지 확인합니다. 웹 플랫폼 설치 관리자 링크를 클릭하여 모두 설치할 수 있습니다. 또는 다음 링크를 사용하여 필수 구성 요소를 개별적으로 설치할 수 있습니다.

Visual Web Developer 2010 대신 Visual Studio 2010을 사용하는 경우 Visual Studio 2010 필수 구성 요소 링크를 클릭하여 필수 구성 요소를 설치합니다.

VB.NET 소스 코드가 있는 Visual Web Developer 프로젝트는 이 항목과 함께 사용할 수 있습니다. VB.NET 버전을 다운로드합니다. C#을 선호하는 경우 이 자습서의 C# 버전 으로 전환합니다.

이 섹션에서는 뷰 템플릿 파일을 사용하여 클라이언트에 HTML 응답을 생성하는 프로세스를 깔끔하게 캡슐화하도록 클래스를 수정 HelloWorldController 합니다.

먼저 클래스의 메서드와 함께 보기 템플릿을 IndexHelloWorldController 사용하겠습니다. 현재 메서드는 Index 컨트롤러 클래스 내에서 하드 코딩된 메시지와 함께 문자열을 반환합니다. Index 다음과 같이 개체를 View 반환하도록 메서드를 변경합니다.

Public Function Index() As ActionResult
            Return View()
        End Function

이제 메서드를 사용하여 호출 Index 할 수 있는 뷰 템플릿을 프로젝트에 추가해 보겠습니다. 이렇게 하려면 메서드 내부를 마우스 오른쪽 단추로 Index 클릭하고 보기 추가를 클릭합니다.

IndexAddView

보기 추가 대화 상자가 나타납니다. 기본 항목을 그대로 두고 추가 단추를 클릭합니다.

3addView

MvcMovie\Views\HelloWorld 폴더와 MvcMovie\Views\HelloWorld\Index.vbhtml 파일이 만들어집니다. 솔루션 탐색기 볼 수 있습니다.

SolnExpHelloWorldIndx

태그 아래에 HTML을 추가합니다 <h2> . 수정된 MvcMovie\Views\HelloWorld\Index.vbhtml 파일은 다음과 같습니다.

@Code
    ViewData("Title") = "Index"
End Code

<h2>Index</h2>

<b>Hello</b> World!

애플리케이션을 실행하고 "hello world" 컨트롤러(http://localhost:xxxx/HelloWorld)로 이동합니다. 컨트롤러의 메서드는 많은 작업을 수행하지 않았습니다. 이 메서드는 Index 단순히 뷰 템플릿 파일을 사용하여 클라이언트에 대한 응답을 렌더링하려고 함을 나타내는 문을 return View()실행했습니다. 사용할 뷰 템플릿 파일의 이름을 명시적으로 지정하지 않았기 때문에 ASP.NET MVC는 기본적으로 \Views\HelloWorld 폴더 내에서 Index.vbhtml 뷰 파일을 사용합니다. 아래 이미지는 보기에 하드 코딩된 문자열을 보여줍니다.

3HelloWorld

꽤 좋아 보인다. 그러나 브라우저의 제목 표시줄에 "인덱스"가 표시되고 페이지의 큰 제목에 "내 MVC 애플리케이션"이 표시됩니다. 변경해 보겠습니다.

보기 및 레이아웃 페이지 변경

먼저 "내 MVC 애플리케이션"이라는 텍스트를 변경해 보겠습니다. 해당 텍스트는 공유되며 모든 페이지에 표시됩니다. 애플리케이션의 모든 페이지에 있더라도 프로젝트의 한 곳에만 표시됩니다. 솔루션 탐색기/Views/Shared 폴더로 이동하여 _Layout.vbhtml 파일을 엽니다. 이 파일을 레이아웃 페이지라고 하며 다른 모든 페이지에서 사용하는 공유 "셸"입니다.

@RenderBody() 파일 아래쪽에 있는 코드 줄을 확인합니다. RenderBody 은 사용자가 만든 모든 페이지가 레이아웃 페이지에 "래핑"된 자리 표시자입니다. 제목을 <h1>" 내 MVC 애플리케이션"에서 "MVC 무비 앱"으로 변경합니다.

<div id="title">
        <h1>MVC Movie App</h1>
  </div>

애플리케이션을 실행하고 이제 "MVC 무비 앱"이 표시됩니다. 정보 링크를 클릭하면 해당 페이지에 "MVC 무비 앱"도 표시됩니다.

전체 _Layout.vbhtml 파일은 다음과 같습니다.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>@ViewData("Title")</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
</head>
<body>
    <div class="page">
        <header>
            <div id="title">
                <h1>MVC Movie App</h1>
            </div>
            <div id="logindisplay">
                @Html.Partial("_LogOnPartial")
            </div>
            <nav>
                <ul id="menu">
                    <li>@Html.ActionLink("Home", "Index", "HelloWorld")</li>
                    <li>@Html.ActionLink("About", "About", "Home")</li>
                </ul>
            </nav>
        </header>
        <section id="main">
            @RenderBody()
        </section>
        <footer>
        </footer>
    </div>
</body>
</html>

이제 인덱스 페이지(보기)의 제목을 변경해 보겠습니다.

@Code
    ViewData("Title") = "Movie List"
End Code

<h2>My Movie List</h2>

<p>Hello from our View Template!</p>

MvcMovie\Views\HelloWorld\Index.vbhtml을 엽니다. 변경할 위치는 두 가지가 있습니다. 첫째, 브라우저의 제목에 표시되는 텍스트, 보조 헤더( <h2> 요소)에 표시되는 텍스트입니다. 앱의 어떤 부분이 변경되는지 코드의 비트를 볼 수 있도록 약간 다르게 만듭니다.

애플리케이션을 실행하고 찾습니다http://localhost:xx/HelloWorld. 브라우저 제목, 기본 제목 및 작은 제목이 변경된 것을 확인합니다. 보기에 대한 작은 변경으로 애플리케이션을 쉽게 변경할 수 있습니다. (브라우저에 변경 내용이 표시되지 않으면 캐시된 콘텐츠를 볼 수 있습니다. 브라우저에서 Ctrl+F5를 눌러 서버의 응답을 강제로 로드합니다.)

3_MyMovieList

하지만 약간의 "데이터"(이 경우 "헬로 월드!" 메시지)는 하드 코딩되어 있습니다. MVC 애플리케이션에는 V(뷰)가 있고 C(컨트롤러)가 있지만 M(모델)은 아직 없습니다. 잠시 후 데이터베이스를 만들고 데이터베이스에서 모델 데이터를 검색하는 방법을 살펴보겠습니다.

컨트롤러에서 보기로 데이터 전달

하지만 데이터베이스로 이동하여 모델에 대해 이야기하기 전에 먼저 컨트롤러에서 보기로 정보를 전달하는 방법에 대해 살펴보겠습니다. 클라이언트에 HTML 응답을 렌더링하기 위해 뷰 템플릿에 필요한 항목을 전달하려고 합니다. 이러한 개체는 일반적으로 컨트롤러 클래스에 의해 만들어지고 뷰 템플릿에 전달되며 보기 템플릿에 필요한 데이터만 포함해야 하며 더 이상 포함되지 않아야 합니다.

이전에는 클래스에서 HelloWorldController 작업 메서드가 Welcome 및 매개 변수를 가져온 namenumTimes 다음 매개 변수 값을 브라우저에 출력했습니다. 컨트롤러가 이 응답을 직접 렌더링하는 대신 해당 데이터를 보기용 모음에 넣겠습니다. 컨트롤러 및 뷰는 개체를 ViewBag 사용하여 해당 데이터를 저장할 수 있습니다. 이는 뷰 템플릿에 자동으로 전달되며, 가방의 내용을 데이터로 사용하여 HTML 응답을 렌더링하는 데 사용됩니다. 이렇게 하면 컨트롤러가 한 가지와 뷰 템플릿을 다른 항목과 관련하므로 애플리케이션 내에서 "문제 분리"를 클린 유지할 수 있습니다.

또는 사용자 지정 클래스를 정의한 다음 자체적으로 해당 개체의 instance 만들고 데이터로 채우고 보기에 전달할 수 있습니다. 보기에 대한 사용자 지정 모델이므로 ViewModel이라고도 합니다. 그러나 소량의 데이터의 경우 ViewBag이 잘 작동합니다.

HelloWorldController.vb 파일로 돌아가서 컨트롤러 내의 메서드를 Welcome 변경하여 Message 및 NumTimes를 ViewBag에 넣습니다. ViewBag은 동적 개체입니다. 즉, 원하는 것을 넣을 수 있습니다. ViewBag에는 내부에 무언가를 넣을 때까지 정의된 속성이 없습니다.

동일한 파일에 새 클래스가 있는 전체 HelloWorldController.vb 입니다.

Namespace MvcMovie
    Public Class HelloWorldController
        Inherits System.Web.Mvc.Controller
        '
        ' GET: /HelloWorld

        Function Index() As ActionResult
            Return View()
        End Function

        Public Function Welcome(ByVal name As String, Optional ByVal numTimes As Integer = 1) As ActionResult
            ViewBag.Message = "Hello " & name
            ViewBag.NumTimes = numTimes
            Return View()
        End Function

    End Class
End Namespace

이제 ViewBag에 자동으로 보기로 전달되는 데이터가 포함되어 있습니다. 다시 말하지만, 다음을 좋아한다면 우리 자신의 개체를 다음과 같이 전달할 수도 있습니다.

return View(myCustomObject)

이제 템플릿이 WelcomeView 필요합니다! 새 코드가 컴파일되도록 애플리케이션을 실행합니다. 브라우저를 닫고 메서드 내부를 마우스 오른쪽 단추로 Welcome 클릭한 다음 보기 추가를 클릭합니다.

보기 추가 대화 상자의 모양은 다음과 같습니다.

3AddWelcomeView

새 시작의 요소 아래에 <h2> 다음 코드를 추가 합니다.vbhtml 파일. 루프를 만들고 사용자가 말하는 것처럼 여러 번 "Hello"라고 말합니다.

@Code 
    For i As Integer = 0 To ViewBag.NumTimes
@<h3> @ViewBag.Message @i.ToString </h3>
     Next i
 End Code

애플리케이션을 실행하고 다음으로 이동합니다. http://localhost:xx/HelloWorld/Welcome?name=Scott&numtimes=4

이제 데이터가 URL에서 가져와 컨트롤러에 자동으로 전달됩니다. 컨트롤러는 데이터를 개체로 Model 패키지하고 해당 개체를 뷰에 전달합니다. 보다 보기는 데이터를 사용자에게 HTML로 표시합니다.

3Hello_Scott_4

이는 모델에 대한 일종의 "M"이었지만 데이터베이스 종류는 아니었습니다. 지금까지 학습한 것을 살펴보고 동영상의 데이터베이스를 만들어 보겠습니다.