ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ASP.NET MVC 자습서(2) - 뷰 추가
    ASP.NET 2020. 3. 20. 11:31
    반응형

    HelloWorld 컨트롤러를 생성하면서 Views에 HelloWorld 폴더가 추가 되었지만 어떠한 데이터도 포함하고 있지 않다. 레이아웃을 가지고 있는 MVC5 페이지를 추가하자

     

    페이지에는 Layout의 경로가 입력되어 있다.

     

    생성한 Index 페이지로 접근 시 

    컨트롤러에 입력한 값이 그대로 리턴된다.

     

    Controllers.HelloWorldController.cs

    View 파일이 생성되었으니 return 값을 View() 로 바꿔주도록 하자

    View 파일을 리턴하기 위해서 타입은 ActionReesult 로 입력해준다.

     

    출력 결과는 Shared 폴더의 _Layout.cshtml과 같다.

     

    _Layout.cshtml 은 생성할 웹페이지의 기본값을 가지고 있으며

    Index.cshtml은 _Layout.cshtml을 참조하고 있다.

     

    Index.cshtml ( Views.HelloWorld ) 페이지에 코드를 추가해보자.

     

     

    출력 결과는

     

    내용이 추가되었다.

     


    Views.Shared._Layout.cshtml

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>@ViewBag.Title - 내 ASP.NET 애플리케이션</title>
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
    </head>
    <body>
        <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    @Html.ActionLink("애플리케이션 이름", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
                </div>
                <div class="navbar-collapse collapse">
                    <ul class="nav navbar-nav">
                        <li>@Html.ActionLink("홈", "Index", "Home")</li>
                        <li>@Html.ActionLink("정보", "About", "Home")</li>
                        <li>@Html.ActionLink("연락처", "Contact", "Home")</li>
                    </ul>
                </div>
            </div>
        </div>
        <div class="container body-content">
            @RenderBody()
            <hr />
            <footer>
                <p>&copy; @DateTime.Now.Year - 내 ASP.NET 애플리케이션</p>
            </footer>
        </div>
    
        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/bootstrap")
        @RenderSection("scripts", required: false)
    </body>
    </html>
    

     

    위에서 출력된 사진을 보면 페이지 왼쪽 상단에 [애플리케이션 이름] 과 

    페이지 하단에 [ 내 ASP.NET 애플리케이션] 이라고 적혀있는것을 볼 수 있다.

     

    출력할 페이지에서 _Layout.cshtml을 참조하고 있는 이상 계속해서 출력될 문구이기 때문에 좀 더 멋있어 보이도록 수정 할 필요가 있다.

     

     

    출력결과

     


    참조하고 있던 레이아웃 페이지를 주석처리 하면 어떤 결과가 실행될까

    출력결과

    참조하기 전과 참조하고 나서 출력한 화면이 같다.

     

    그이유는 Views폴더 내에 위치한 _ViewStart.cshtml 이 아래의 사진과 같이 공통으로 _Layout.cshtml 을 참조하도록 명시하고 있기 때문이다.

    그렇기 때문에 생성하는 View 파일은 _Layout.cshtml을 참조하도록 명시하고 있는 코드를 생략이 가능하다.

     


    ViewBag.Title 수정

     

     

     

    타이틀에서 Index 라고 적혀있던 부분이 MVAPP 으로 바뀐것을 볼 수 있다. Layout 페이지에서 직접 수정하지 않아도 개별의 View 에서 ViewBag 명령을 통하여  출력될 페이지의 디자인이 수정 가능하다.

     


    컨트롤러 -> 뷰페이지 데이터 전달

     

    컨트롤러 클래스는 들어오는 URL요청에 대한 응답으로 호출된다. 브라우저에서의 요청을 처리하는 코드를 작성하고, 데이터베이스에 접근하여 데이터를 검색하며 브라우저에게 응답할 자료들을 결정한다. 최종으로 뷰 템플릿을 사용하여 브라우저에게 응답할 HTML서식을 지정하고 응답한다.

     

    Controllers. HelloWorldController.cs

    public ActionResult Welcome(string name, int numTimes = 1)
            {
                ViewBag.Message = "Hello " + name;
                ViewBag.Numtimes = numTimes;
    
                return View();
            }

     

    Welcome 함수에 View.Bag을 통해서 전달할 데이터를 입력하고

    return 값을 View() 로 수정하였다. 

     

    View를 리턴하기 위해서 Views.HelloWorld 에 Welcome.cshtml을 추가해주자

     

     

     

     

    View페이지 생성에 대한 두번째 설명이므로 뒤의 내용에서 View 페이지를 생성해야 할 때는 따로 설명을 하지 않을것이다. Controller가 가진 함수이름에 따라서 View페이지를 생성하는것만 기억하도록 하자.

     

    생성된 페이지는 위와 같다.

     

    Views.HelloWorld.Welcome.cshtml

    @{ 
        ViewBag.Titme = "Welcome";
    }
    
    <h2>Welcome</h2>
    
    <ul>
        @for (int i = 0; i < ViewBag.Numtimes; i++)
        {
            <li>@ViewBag.message</li>
        }
    </ul>

    코드를 위와같이 추가해주자.

     

    위에서 확인할 수 있는 것은

    함수를 실행하기 위해서는 앞에 @를 붙여주면 되는 것이다.

     

    Controllers.HelloWorld - Welcome

    전에 생성한 Welcome 함수에서는 name값과 numTimes 값을 매개변수로 받아서

     

    ViewBag.Message 명령은 name 값을

    ViewBag.Numtimes = 명령은 numTimes 값을 View 로 보내게 된다.

     

    View 파일은 numTimes 값을 반복문에서 갖게되고

    name은 반복문 안에서 출력하는 구조이다. 

     

     

    https://localhost:44357/HelloWorld/welcome?name=jay&numtimes=5

     

    위 코드와 같이 name과 numtimes을 파라메터 값으로 입력하여 페이지에 요청을 한 뒤 출력 결과를 보자.

     

     

    댓글

Designed by Tistory.