'ASP.NET MVC'에 해당되는 글 9건

  1. 2008.11.27 ASP.NET MVC Tutorial #04
  2. 2008.10.24 ASP.NET MVC Tutorial #03
  3. 2008.10.21 ASP.NET MVC Tutorial #02 1
  4. 2008.10.20 ASP.NET MVC Tutorial #01

  • Creating a Tasklist Application with ASP.NET MVC
  • Understanding Models, Views, and Controllers
  • Understanding Controllers, Controller Actions, and Action Results
  • Understanding Views, View Data, and HTML Helpers
  • An Introduction to URL Routing
  • Preventing JavaScript Injection Attacks
  • Creating Unit Tests for ASP.NET MVC Applications
  • Using ASP.NET MVC with Different Versions of IIS
  • Creating Custom HTML Helpers
  • Creating Model Classes with LINQ to SQL
  • Displaying a Table of Database Data
  • Creating Page Layouts with View Master Pages
  • Passing Data to View Master Pages
  • Understanding Action Filters

    Understanding Views, View Data, and HTML Helpers

     

    이 튜토리얼의 목적은 ASP.NET MVC views, view data, 그리고 HTML Helpers 에 관한 설명을 할 것이다. 이 튜토리얼의 마지막에서, 새로운 views을 어떻게 만들고, controller에서 view로 데이터가 어떻게 이동하는지, 그리고 view에서 콘텐트를 가져오기 위해 HTML Helpers가 어떻게 사용되는지 이해할 수 있을 것이다.

     

    Understanding Views

     

    ASP.NET 이나 ASP와는 달리, ASP.NET MVCURL에 해당되는 페이지를 포함하지 않는다. ASP.NET 어플리케이션에서, 사용자가 브라우저 주소 바에 입력한 URL 경로에 대응하는 것은 디스크에 존재하는 페이지가 아니다. ASP.NET MVC 어플리케이션에서 페이지에 가장 가까운 것은 view 이다.

     

    ASP.NET MVC 어플리케이션에서, 브라우저 입력 요청은 controller action과 매핑 된다. Controller action view을 리턴 한다. 그러나, controller action은 다른 controller action에 리다이렉트 하는 것처럼 다른 형태의 action을 취할 때도 있다.

     

    다음 코드는 HomeController라는 간단한 controller이다. HomeController Index() Details()라는 두 개의 controller action을 나타낸다.

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

     

    namespace MvcApp.Controllers

    {

         [HandleError]

         public class HomeController : Controller

         {

              public ActionResult Index()

              {

                   return View();

              }

     

              public ActionResult Details()

              {

                   return RedirectToAction("Index");

              }

         }

    }

     

    브라우저 주소 바에 다음과 같은 URL을 입력하면, action으로 Index()가 불린다.

    /Home/Index

     

    브라우저 주소 바에 다음 URL을 입력하면, 두 번째 action으로 Detail()가 불린다.

    /Home/Details

     

    Index() action view을 리턴 한다. 사용자들이 만든 대부분의 action view을 리턴 한다. 그러나, action은 다른 형태의 결과를 리턴 하기도 하는데, 예를 들어, Details() action Index() action은 입력 요청을 Index() action으로 리다이렉트 하는 RedirectToActionResult을 리턴 한다.

     

    Index() action은 다음 코드를 가지고 있다.

     

    return View();

     

    이 코드는 웹 서버에 다음 경로의 위치한 view을 리턴 한다.

    \Views\Home\Index.aspx

     

    View의 경로는 controller의 이름과 controller action의 이름으로 생각해 볼 수 있다.

     

    마찬가지로 생각해 본다면, 다음 코드는 “Fred”라는 이름의 view을 리턴 할 것이다.

     

    return View(“Fred”);

     

    이 코드가 실행될 때, view은 다음 경로를 리턴 할 것이다.

    \Views\Home\Fred.aspx

     

    Creating a View

     

    View을 추가 할 때는, Controller 접미사를 제외한 controller와 같은 이름을 가진 폴더에 생성해야 한다. 예를 들어, ProductController라는 이름의 controller에 의해 리턴 되는 Index view을 만든다면, 프로젝트에서 다음 경로로 추가 시켜야 한다.

    \Views\Product\Index.aspx

     

    View을 가진 폴더 이름은 반드시 view을 리턴 하는 controller 이름과 일치하여야 한다.

     

    Adding Content to a View

     

    View은 스크립트를 포함할 수 있는 표준 HTML 문서이다. View에 동적 콘텐트를 위해 스크립트를 추가할 수 있다. 예를 들어 다음 코드의 view은 현재 날짜와 시간을 표시한다.

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs"

     Inherits="MvcApp.Views.Home.Index" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

         <head runat="server">

              <title>Index</title>

         </head>

         <body>

              <div>

                   The current date and time is:

                   <% Response.Write(DateTime.Now);%>

              </div>

         </body>

    </html>

     

    위 코드의 HTML body은 다음 스크립트를 가지고 있다.

     

    <% Response.Write(DateTime.Now);%>

     

    당신은 스크립트 시작과 끝에 나타낼 스크립트 구획 문자로 <% %>을 사용한다. 이 스크립트는 C# 코드이고, 브라우저가 콘텐트를 렌더링 할 때 Response.Write()을 호출 함으로써 시간과 날짜를 표시한다.

     

    Response.Write()을 자주 호출 하기에 마이크로소프트는 Response.Write() 메서드를 호출하기 위한 쉬운 방법을 제공한다. 다음 코드의 view에서 Response.Write() 호출을 간단히 하기 위해 구획 문자 <%= %>을 사용한다.

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index2.aspx.cs"

     Inherits="MvcApp.Views.Home.Index2" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

         <head runat="server">

              <title>Index2</title>

         </head>

         <body>

              <div>

                   The current date and time is:

                   <%=DateTime.Now%>

              </div>

         </body>

    </html>

     

    view에서 동적 콘텐트를 가져오기 위해 .NET 언어를 사용 할 수 있다. 일반적으로 Visual Basic .NET 이나 C#을 사용할 것이다.

     

    Using HTML Helpers to Generate View Content

     

    View에 콘텐트를 쉽게 추가할 수 있게, HTML Helper라 불리는 유용한 메소드를 사용할 수 있다. HTML Helper은 문자열을 가져오는 메소드이다. 예를 들어, textboxes, links, dropdown, 그리고 list boxes등과 같은 HTML 요소들을 사용하는 HTML Helper를 이용한다.

     

    예를 들어, 다음 코드에서 view은 로그인 폼을 만들기 위하여 TextBox() Password() Helper을 사용한다.

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index3.aspx.cs"

     Inherits="MvcApp.Views.Home.Index3" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

         <head runat="server">

              <title>Login Form</title>

         </head>

         <body>

              <div>

                   <form method="post" action="/Home/Login">

                        <label for="userName">User Name:</label>

                        <br />

                        <%=Html.TextBox("userName")%>

                        <br /><br />

                        <label for="password">Password:</label>

                        <br />

                        <%=Html.Password("password")%>

                        <br /><br />

                        <input type="submit" value="Log In" />

                   </form>

              </div>

         </body>

    </html>

     

     

    모든 Html Helper 메소드는 view HTML 프로퍼티라 불린다. 예를 들어, Html.TextBox() 메소드를 호출 함으로써 TextBox 을 그린다.

     

    HTML Helper을 호출할 때, 스크립트 구분 문자 <%= %>을 사용한다는 것을 알아두자. HTML Helper은 간단하게 문자열을 리턴 한다. 브라우저에 문자열을 그리기 위하여 Response.Write() 호출을 통해야 한다.

     

    HTML Helper 메소드를 사용하는 것은 선택적이다. 하지만 이것을 사용함으로 작성해야 할 HTML과 스크립트 코드의 양을 줄일 수 있다. 다음 코드에서 view HTML Helpers을 사용하지 않고 위 코드의 view와 같은 폼을 브라우저에 표현한다.

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index4.aspx.cs"

     Inherits="MvcApp.Views.Home.Index4" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

         <head runat="server">

              <title>Login Form without Help</title>

         </head>

         <body>

              <div>

                   <form method="post" action="/Home/Login">

                        <label for="userName">User Name:</label>

                        <br />

                        <input name="userName" />

                        <br /><br />

                        <label for="password">Password:</label>

                        <br />

                        <input name="password" type="password" />

                        <br /><br />

                        <input type="submit" value="Log In" />

                   </form>

              </div>

         </body>

    </html>

     

    다시 말하자면, HTML Helpers 작성은 선택적이다. 예를 들어, 자동적으로 HTML 테이블에 데이터베이스 레코드 집합을 보여주기 위한 GridView() 메소드를 만들 수 있다. 지금까지 Creating Custom HTML Helper를 주제로 이야기를 하였다.

     

    Using View Data to Pass Data to a View

     

    View ViewData라는 controller에서 view로 데이터를 전달하는 속성을 가지고 있다. 예를 들어, 다음 코드의 controller ViewData 에 메시지를 추가하는 코드이다.

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

     

    namespace MvcApp.Controllers

    {

         public class ProductController : Controller

         {

              public ActionResult Details()

              {

                   ViewData["message"] = "Hello World!";

                   return View();

              }

         }

    }

     

    ViewData controller 프로퍼티는 이름과 값으로 구성된 콜렉션을 나타낸다. 위 코드에서, Detail() 메소드는 “Hello World!” 라는 값을 가진 message라는 이름의 view data 콜렉션에 아이템을 추가한다. View Details() 메소드에 의해 리턴 되면, view data는 자동적으로 view에 전달된다.

     

    아래의 코드에서 view view data로부터 message을 받고, 브라우저의 값을 렌더링 한다.

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Details.aspx.cs"

       Inherits="MvcApp.Views.Product.Details" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

         <head runat="server">

              <title>Product Details</title>

         </head>

         <body>

              <div>

                   <%=Html.Encode(ViewData["message"])%>

              </div>

         </body>

    </html>

     

    view에서 메시지가 렌더링 될 때, Html.Encode() HTML Helper 메소드가 갖는 이점이 있다. Html.Encode() HTML Helper은 특별한 문자, 예를 들어 웹 페이지에서 보여지는 안전한 문자로 인코딩한다. 당신이 사용자가 웹 사이트로 submit한 콘텐트를 렌더링 할 때 마다, 자바스크립트 인젝션 공격을 보호하기 위해 콘텐트를 인코딩 해야 한다.

     

    위 코드에서 controller에서 view로 간단한 문자 메시지를 전송하는 view data을 보았다. 당신은 예를 들어, 데이터베이스 레코드 콜렉션처럼 여러 타입의 데이터를 전송하는 view data을 사용할 수 있다. View Product 데이터베이스 테이블의 콘텐트를 보여주기를 원한다면, view data로 데이터베이스 레코드 콜렉션을 전송해야 한다.

     

  • Posted by glycerine
    ,

    꾸준함에 있어서. 오늘도!

  • Creating a Tasklist Application with ASP.NET MVC
  • Understanding Models, Views, and Controllers
  • Understanding Controllers, Controller Actions, and Action Results
  • Understanding Views, View Data, and HTML Helpers
  • An Introduction to URL Routing
  • Preventing JavaScript Injection Attacks
  • Creating Unit Tests for ASP.NET MVC Applications
  • Using ASP.NET MVC with Different Versions of IIS
  • Creating Custom HTML Helpers
  • Creating Model Classes with LINQ to SQL
  • Displaying a Table of Database Data
  • Creating Page Layouts with View Master Pages
  • Passing Data to View Master Pages
  • Understanding Action Filters

  • Understanding Controllers, Controller Actions, and Action Results

     

    이 튜토리얼은 ASP.NET MVC controllers, controller actions, and action results 에 대해 알아볼 것이다. 이 튜토리얼이 끝난 후에, ASP.NET MVC 웹 사이트에서 controllers 가 방문자와 상호 작용을 통제하는 방법을 이해할 것이다.

     

    Understanding Controllers

     

    MVC controllers ASP.NET MVC 웹 사이트에 대응하는 요청에 응답할 책임을 가지고 있다. 각각의 브라우저 요청은 특별한 controller와 매핑 되어있다. 예를 들어, 브라우저 주소에 다음 URL을 넣는다고 생각하자.

     

    http://localhost/Product/Index/3

     

    이 경우, ProductController 이름의 controller가 불린다. , ProductController는 브라우저 요청에 응답한다. 이 경우, controller는 브라우저에 view을 리턴 하거나, 사용자에게 또 다른 controller을 리다이렉트 시킬 것 이다.

     

    ASP.NET MVC 어플리케이션 Controller 폴더에 새로운 controller을 만들자. Controller 이름은 접미사 Controller을 반드시 포함해야 한다. 예를 들어, ProductController는 괜찮지만 Product 라 정하면 동작하지 않을 것이다.

     



    ProductController
    라는 이름의 새로운 controller을 만들었다면 아래와 같이 코딩하자.

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

     

    namespace MvcApp.Controllers

    {

         public class ProductController : Controller

         {

              public ActionResult Index()

              {

                   // Add action logic here

                   throw new NotImplementedException();

              }

         }

    }

    코드를 보면, controller은 단지 클래스이고, System.Web.MVC.Controller 클래스를 상속받은 클래스이다. Controller base 클래스를 상속 받았기 때문에, controller은 부모의 메소드들을 쓸 수 있다.

     

    Understanding Controller Actions

     

    Controller controller actions에 영향을 받는다. Action은 브라우저 주소에서 특별한 URL을 입력했을 때, 불려지는 controller 메소드이다. 예를 들어, 다음 URL을 요청했다고 생각하자.

     

    http://localhost/Product/Index/3

     

    이 경우, ProductController 클래스에 있는 Index() 메소드가 불려진다. Index() 메소드는 controller action의 하나의 예 이다.

     

    Controller action controller 클래스에서 public 메소드로 정의되어야 한다. Controller 클래스에 추가된 public 메소드는 controller action에 의해 자동적으로 불려진다는 것을 명심하자.

     

    Controller action을 만족시킬 몇 가지 추가 사항이 있다. Controller action으로 사용되는 메소드는 오버로드 될 수 없다. 더욱이, controller action static 메소드가 될 수 없다.

     

    Understanding Action Result

     

    Controller action action result를 리턴 한다. Action result controller action의 브라우저 요청에 대한 응답이다.

     

    ASP.NET MVC 프레임워크는 6가지 action result 타입을 지원한다.

     

    1.     ViewResult – HTML Markup을 의미한다.

    2.     EmptyResult – 결과가 없음을 의미한다.

    3.     RedirectResult – 새로운 URL로 리다이렉트 한다는 것을 의미한다.

    4.     RedirectToRouteResult – 새로운 controller action으로 리다이렉트 한다는 것을 의미한다.

    5.     JsonResult – AJAX 어플리케이션에서 사용되는 Javascript Object Notation을 의미한다.

    6.     ContentResult – 텍스트 결과를 의미한다.

     

    모든 action result ActionResult class로부터 상속 받는다.

     

    대부분 controller action ViewResult을 리턴 한다. 예를 들어, 다음 코드 Index controller ViewResult을 리턴 한다.

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

     

    namespace MvcApp.Controllers

    {

         public class BookController : Controller

         {

              public ActionResult Index()

              {

                   return View();

              }

         }

    }

    Action ViewResult을 리턴 하면, HTML이 브라우저에 보여진다. 다시 말해, Index() 메소드는 브라우저에 Index.aspx view을 리턴 한다.

     

    위의 코드에서 Index() action은 실질적으로 ViewResult()를 리턴 하지 않는다는 것을 확인해라. Controller base 클래스의 View() 메소드가 불려진다. 일반적으로, action result 그대로를 리턴 하지 않는다. 다음 Controller base 클래스 메소드 중 하나가 불려진다.

     

    1.     View – ViewResult action result 리턴

    2.     Redirect – RedirectResult action result 리턴

    3.     RedirectToAction – RedirectToRouteResult action result 리턴

    4.     RedirectToRoute – RedirectToRouteResult action result 리턴

    5.     Json – JsonResult action result 리턴

    6.     Content – ContentResult action result 리턴

     

    그렇기 때문에, 브라우저에 View가 리턴 되기를 원한다면, View() 메소드를 호출하면 된다. 하나의 controller action에서 다른 controller action으로 리다이렉트 하길 원한다면, RedirectToAction 메소드를 호출하면 된다. 예를 들어, 다음 코드의 Details() action view을 보여주거나, Id 파라메터 값이 null 이면 Index() action을 사용자에게 리다이렉트 시킨다.

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

     

    namespace MvcApp.Controllers

    {

         public class CustomerController : Controller

         {

              public ActionResult Details(int? Id)

              {

                   if (Id == null)

                        return RedirectToAction("Index");

                   return View();

              }

     

              public ActionResult Index()

              {

                   return View();

              }

         }

    }

    ContentResult action result는 특별하다. Text action 결과를 리턴 하기 위해 ContentResult action result를 사용한다. 예를 들어, 다음 코드의 Index() 메소드는 HTML이 아닌 텍스트로서 메시지를 리턴 한다.

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

     

    namespace MvcApp.Controllers

    {

         public class StatusController : Controller

         {

              public ContentResult Index()

              {

                   return Content("Hello World!");

              }

         }

    }

    StatusController.Index() action이 불려질 때, view은 리턴 되지 않는다. 대신, “Hello World!” 가 브라우저에 출력된다.

     

    Controller action action result(Date or Integer)가 아닌 결과를 리턴 한다면, 그 결과는 자동적으로 ContentResult가 된다. 예를 들어, 다음 코드 WorkController Index() action이 불려진다면, date가 자동적으로 ContentResult로 리턴 된다.

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

     

    namespace MvcApp.Controllers

    {

         public class WorkController : Controller

         {

              public DateTime Index()

              {

                   return DateTime.Now;

              }

         }

    }

    Index() action DateTime 객체를 리턴 한다. ASP.NET MVC 프레임워크는 DateTime 객체를 string으로 변환하고, DateTime 값을 자동적으로 ContentResult로 만든다. 그래서 브라우저는 텍스트로서 날짜와 시간 값을 받는다.

     

    Summary

     

    이 튜토리얼의 목적은 ASP.NET MVC controllers, controller actions, 그리고 controller action result 의 개념을 소개하는 것이다. 첫 번째로, ASP.NET MVC 프로젝트에 어떻게 새로운 controllers을 추가하는지 설명하였고, controllerpublic 메소드가 controller action으로부터 어떻게 불려지는지를 설명했다. 마지막으로, controller action으로부터 리턴 되는 다양한 타입의 action result을 설명하였다. 특히, controller action으로 부터 ViewResult, RedirectToActionResult,, 그리고 ContentResult 가 어떻게 리턴 되는지 설명했다.

     



    Posted by glycerine
    ,

    #01 편도 그렇지만 포스팅하고 보니 해석이 엉망이다.
    짧은 어휘력과 의역 능력이지만 나날이 발전 하는 그날까지.

  • Creating a Tasklist Application with ASP.NET MVC
  • Understanding Models, Views, and Controllers
  • Understanding Controllers, Controller Actions, and Action Results
  • Understanding Views, View Data, and HTML Helpers
  • An Introduction to URL Routing
  • Preventing JavaScript Injection Attacks
  • Creating Unit Tests for ASP.NET MVC Applications
  • Using ASP.NET MVC with Different Versions of IIS
  • Creating Custom HTML Helpers
  • Creating Model Classes with LINQ to SQL
  • Displaying a Table of Database Data
  • Creating Page Layouts with View Master Pages
  • Passing Data to View Master Pages
  • Understanding Action Filters

  • Understanding Models, Views, and Controllers

     

    이 튜토리얼은 ASP.NET MVC Models, Views, 그리고 Controller 에 관해 자세히 알아볼 것이다. 다시 말해 ASP.NET MVC 에서 ‘M’, ‘V’ 그리고 ‘C’에 관해 설명할 것이다.

     

    이 튜토리얼을 읽은 후, ASP.NET MVC 어플리케이션의 각기 다른 영역이 어떻게 서로 돌아가는지 이해 할 것이다. ASP 어플리케이션이나 ASP.NET Web Forms 어플리케이션과 ASP.NET MVC 어플리케이션 구조가 어떻게 다른지 이해해야 한다.

     

    The Sample ASP.NET MVC Application

     

    ASP.NET MVC 웹 어플리케이션을 만듦으로써 생기는 기본 Visual Studio 템플릿은 ASP.NET MVC 어플리케이션의 각 부분을 이해하기 위한 기본적인 샘플 어플리케이션을 포함하고 있다. 우리는 이 튜토리얼에서 그 심플한 어플리케이션을 설명할 것이다.

     

    새로운 프로젝트를 만들자. (Unit Test Project No)

     

    새 프로젝트가 생성되면 솔루션 탐색기에 몇몇 폴더와 파일이 생긴 것을 볼 것이다. 중요한 것은 Models, Views, 그리고 Controllers 세 개의 폴더 이다. 폴더 이름에서 추측 할 수 있듯이, 세 폴더는 models, views, 그리고 controllers 을 설명하는 파일들을 포함한다.

     

    Controllers 폴더를 펼치면, HomeController.cs 파일을 볼 것이다. Views 폴더를 펼치면, Home Shared 이름의 서브 폴더를 볼 것이다. Home 폴더를 펼치면, About.aspx Home.aspx 파일을 볼 것이다. 이 파일들은 ASP.NET MVC 템플릿과 함께 포함된 같은 어플리케이션을 구성한다.

     


     

    현재의 프로젝트를 빌드 시켜보자. ASP.NET MVC 어플리케이션이 돌아가면, Visual Studio는 웹 브라우저에서 어플리케이션을 실행 시킨다. 샘플 어플리케이션은 Index 페이지와 About 페이지, 두 페이지로 구성된다. 어플리케이션이 처음으로 시작 될 때, Index 페이지가 나타난다.

     


    브라우저 주소 바의 URL을 자세히 보라. Home 메뉴 링크를 클릭했을 때, 브라우저 주소 바의 URL /Home으로 바뀐다. 마찬가지로 About 메뉴 링크를 클릭하면, 브라우저 주소 바의 URL /About 으로 바뀐다.

     

    브라우저를 닫고 Visual Studio로 돌아가서 Home이라는 파일과 About이라는 파일을 찾는다면 보이지 않을 것이다. 이 파일은 존재하지 않는다. 이것이 어떻게 가능한 것인가?

     

    A URL Does Not Equal a Page

     

    전통적인 ASP.NET 웹 폼 어플리케이션이나 ASP 어플리케이션을 빌드 하면, URL과 페이지가 1:1 대응된다. 서버로부터 SomePage.aspx 라는 이름의 페이지를 요청하면, SomePage.aspx 라는 이름의 페이지를 디스크에서 찾는다. SomePage.aspx 페이지가 존재하지 않는다면, 404 – Page Not Found 에러가 뜰 것이다.

     

    ASP.NET MVC 어플리케이션을 구성할 때, 대조적으로, 브라우저 주소 바에 타이핑한 URL과 어플리케이션에서 찾는 파일을 매칭시키지 않는다. ASP.NET MVC 어플리케이션에서 URL은 디스크에 존재하는 페이지가 아니라 controller action URL이 매칭된다.

     

    전통적인 ASP.NET 이나 ASP 어플리케이션에서, 브라우저 요청은 페이지에 매핑 되었다. ASP.NET MVC 어플리케이션에서는 브라우저 요청이 controller actions과 매핑 된다. ASP.NET 웹 폼 어플리케이션은 콘텐트 중심적이었다면, ASP.NET MVC 어플리케이션은 어플리케이션 논리 중심 적이다.

     

    Understanding URL Routing

     

    ASP.NET MVC 특징 중 controller action 에 매핑 된 브라우저 요청을 URL 라우팅 이라고 부른다. URL 라우팅은 controller action 에 들어오는 요청에 길을 정한다.

     

    URL 라우팅은 들어오는 요청을 다루기 위해 route table을 사용한다. route table은 웹 어플리케이션이 처음으로 시작할 때 만들어 진다. Route table Global.asax 파일에서 준비된다.

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

    using System.Web.Routing;

     

    namespace MvcApplication1

    {

         public class GlobalApplication : System.Web.HttpApplication

         {

              public static void RegisterRoutes(RouteCollection routes)

              {

                   routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

                   routes.MapRoute(

                   "Default",

                   "{controller}/{action}/{id}",

                   new { controller = "Home", action = "Index", id = ""}

                   );

              }

     

              protected void Application_Start()

              {

                   RegisterRoutes(RouteTable.Routes);

              }

         }

    }

     

    ASP.NET 어플리케이션이 처음 시작할 때, Application_Start() 메소드가 호출된다. 이 메소드는 RegisterRoutes() 메소드를 호출하고 RegisterRoutes() 메소드는 기본 route table을 만든다.

     

    기본 route table은 하나의 route로 구성된다. 이 기본 route은 모든 들어오는 요청을 세 조각으로 나눈다. 첫 조각은 controller 이름과 매핑되고, 두 번째 조각은 action 이름과 매핑된고, 마지막 조각은 Id 이름의 액션을 지나가는 파라미터와 매핑된다.

     

    예를 들어 다음 URL을 생각해보자.

     

    /Product/Details/3

     

    URL은 아래와 같이 3 부분으로 해석된다.

     

    Controller = ProductController

    Action = Details

    Id = 3

     

    접미사 Controller Controller 파라미터 끝에 붙는 것을 명심해라.

     

    기본 route는 기본적으로 3가지 조각들을 가지고 있다. 기본 Controller HomeController이고, 기본 Action Index, 그리고 기본 Id은 빈 문자열 값이다. 이와 같은 특징으로 다음 URL은 어떻게 해석되는지 생각해보자.

     

    /Employee

     

    URL은 아래와 같이 세 조각으로 해석된다.

     

    Controller = EmployeeController

    Action = Index

    Id = “”

     

    마지막으로 URL을 입력하지 말고 ASP.NET MVC 어플리케이션을 연다면 그때 URL은 아래와 같이 해석된다.

     

    Controller = HomeController

    Action = Index

    Id = “”

     

    이 요청은 HomeController 클래스 상에서 Index() action 이 라우트 된 것이다.

     

    Understanding Controllers

     

    Controller MVC 어플리케이션이 사용자와 상호 작용하는 방법을 통제하는 책임을 가지고 있다. Controller은 사용자가 브라우저에서 요청을 했을 때 사용자에게 무엇을 보내야 하는지 결정한다.

     

    Controller은 단지 클래스이다. 샘플 ASP.NET MVC 어플리케이션은 Controllers 폴더 안에 위치한 HomeController.cs 라는 이름의 하나의 controller을 가지고 있다.

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

       

    namespace MvcApplication1.Controllers

    {

         public class HomeController : Controller

         {

              public ActionResult Index()

              {

                   ViewData["Title"] = "Home Page";

                   ViewData["Message"] = "Welcome to ASP.NET MVC!";

                   return View();

              }

     

              public ActionResult About()

              {

                   ViewData["Title"] = "About Page";

                   return View();

              }

         }

    }

     

    HomeController Index() About() 두 메소드를 가지고 있는 것을 보자. 이 두 메소드는 Controller에 의해 드러나는 두 action과 일치한다. URL /Home/IndexHomeController.Index() 메소드를 불러내고, URL /Home/About HomeController.About() 메소드를 불러낸다.

     

    Controller에서 public 메소드는 controller action으로서 드러난다. 이 부분은 주의할 필요가 있다. 이것은 controller 안에 public 메소드는 브라우저에 URL을 입력하고 인터넷에 접속하는 누군가에게 불리어 질 수 있다는 것을 의미한다.

     

    Understanding View

     

    Controller HomeController 클래스에 의해 드러나고, Index() About() 메소드는 view을 리턴 한다. View은 브라우저에 보내는 HTML Markup과 콘텐트로 구성된다. View ASP.NET MVC 어플리케이션 동작에서 페이지와 동등하다.

     

    View은 올바른 위치에 만들어야 한다. HomeController.Index() action은 다음 경로에 있는 view을 리턴 한다.

    \Views\Home\Index.aspx

     

    HomeController.About() action은 다음 경로에 있는 view을 리턴 한다.

    \View\Home\About.aspx

     

    일반적으로 controller action을 위한 view가 리턴 되기를 원한다면, controller와 같은 이름의 View 폴더 안에서 서브 폴더를 만들어야 한다. 서브 폴더가 없다면, controller action을 위한 같은 이름의 aspx 파일을 만들 수 없다.

     

    <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"

    AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="MvcApplication1.Views.Home.About"%>

     

    <asp:Content ID="aboutContent" ContentPlaceHolderID="MainContent" runat="server">

         <h2>About Us</h2>

         <p>

              TODO: Put <em>about</em> content here.

         </p>

    </asp:Content>

     

    View ASP 또는 ASP.NET 웹 폼의 페이지와 흡사하다. View HTML 콘텐트와 스크립트로 구성된다.

      

    Understanding Models

     

    우리는 controllers views에 관에 이야기를 했다. 마지막 주제는 models 이다. MVC model은 무엇일까?

     

    MVC model view controller에 포함되지 않는 모든 어플리케이션 로직으로 구성된다. Model은 또한 모든 비즈니스 로직과 데이터베이스 액세스 로직으로 구성되기도 한다. 예를 들어, 데이터베이스와 연결하기 위해 LINQ to SQL을 사용한다면, Models 폴더 안에 LINQ to SQL 클래스를 만들어야 한다.

     

    View은 사용자 인터페이스를 생성하는 것과 관련된 로직만으로 구성된다. Controller은 사용자에게 다른 action으로 리다이렉트 하거나 올바른 view을 리턴 하는 요청을 처리하는 최소한의 로직으로 구성된다. 이 외의 모든 것은 model 안에 포함된다.

     

    일반적으로 fat models skinny controller 만들기를 노력해야 한다. 다시 말해 controller 메소드는 적은 라인의 코드로 구성 되어야 한다. Controller action이 너무 방대해진다면, Models 폴더에 새로운 클래스를 만들어 로직을 이동시키는 것에 대해 생각해야 할 것이다.

     

    Summary

     

    이 튜토리얼은 ASP.NET MVC 웹 어플리케이션의 각기 다른 세 파트에 대해 자세히 알아 보았다. Controller actions에서 브라우저 입력 요청이 URL Routing과 어떻게 매핑 되는지 설명하였다. 또한, controllers가 어떻게 조정하고, views가 어떻게 브라우저에 리턴 하는지 설명하였다. 마지막으로, models가 어플리케이션 비즈니스와 데이터 로직을 구성하는 방법에 대해서도 설명 하였다.



    Posted by glycerine
    ,

    튜토리얼 정복 시리즈 1탄 ASP.NET MVC !!!

    Creating a Tasklist Application with ASP.NET MVC

     

    이 튜토리얼의 목적은 ASP.NET MVC 어플리케이션을 구축하는 감각을 일깨워 주는 것이다. 이 튜토리얼에서 단순한 Tasklist 어플리케이션을 구축하는 방법을 보여줄 것이다.

     

    ASP ASP.NET 에서 작업을 해봤다면, 당신은 ASP.NET MVC 가 매우 친근할 것이다. ASP.NET MVCASP 어플리케이션의 페이지와 매우 흡사하다. 그리고 전통적인 ASP.NET Web Form 어플리케이션처럼, ASP.NET MVC은 언어들과 닷넷 프레임워크에서 제공하는 클래스들에 풍부한 접근을 제공한다.

     

    The Tasklist Application

     

    단순함을 유지하기 위해, 매우 심플한 Tasklist 어플리케이션을 만들 것이다. 이 어플리케이션은 다음 3가지 기능을 가지고 있다.

     

    1.     일정의 리스트

    2.     새 일정 만들기

    3.     완료된 일정의 표시

     

    Creating an ASP.NET MVC Web Application Project

     

    Visual Studio 2008에서 새로운 ASP.NET MVC Web Application project을 만들자. File, New Project 메뉴를 선택하면 당신은 New Project dialog box가 뜨는 것을 볼 것이다. 당신의 좋아하는 프로그래밍 언어(C# or VB)를 선택하고 ASP.NET MVC Application project을 선택하자. 프로젝트 이름은 TaskList라 하고 OK 버튼을 클릭하라.

     


    (영문 VS2008에서는 unit test를 생설할지 박스가 나오는데 No 클릭)

     

    ASP.NET MVC 어플리케이션은 기본적으로 다음 폴더들을 가지고 있다. Models, Views, 그리고 Controllers 폴더 이다.

    당신은 솔루션 탐색기로 위의 폴더들을 볼 수 있다. 우리는 TaskList 어플리케이션을 구축함에 있어 Models, Views, 그리고 Controllers 폴더에 파일을 추가할 것이다.

     

    Creating the Controller

     

    보통 ASP.NET MVC 어플리케이션을 만들 때 당신은 controller을 만드는 작업부터 시작할 것이다. ASP.NET MVC 어플리케이션에 대한 각 브라우저의 요청은 controller에 의해 다뤄진다. Controller는 요청에 응답하는 어플리케이션 로직으로 구성된다.

     

    우리의 TaskList 어플리케이션에서 우리는 HomeController 클래스를 정의할 것이고 아래의 코드로 구성된다. 정의된 controller 4가지 함수를 구성한다. Index(), Create(), CreateNew(), 그리고 Complete(). 각 함수는 controller action 에 일치한다.

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

    using TaskList.Models;

     

    namespace TaskList.Controllers

    {

         public class HomeController : Controller

         {

              // 일정 목록을 보여준다.

              public ActionResult Index()

              {

                   return View();

              }

              // 새 일정을 작성하는 폼을 보여준다.

              public ActionResult Create()

              {

                   return View();

              }

              // 데이터베이스에 새 일정을 추가한다.

              public ActionResult CreateNew()

              {

                   return RedirectToAction("Index");

              }

              // 완료된 일정을 표시한다.

              public ActionResult Complete()

              {

                   // 데이터베이스 로직

                   return RedirectToAction("Index");

              }

         }

    }

     

    여기에 각 controller action의 목적이 있다

     

    ü  Index() – 당신이 일정의 리스트를 보기를 원할 때 호출

    ü  Create() – 당신이 새로운 일정을 추가하기 위해 등록 폼을 보기를 원할 때 호출

    ü  CreateNew() – 새로운 일정 등록을 위한 폼이 submit 되었을 때 호출. controller 행동은 실제 새로운 일정을 데이터 베이스에 추가 시키는 작업을 한다.

    ü  Complete() – 새로운 일정이 완료됨을 표시할 때 호출.

     

    우리는 추가적인 작업을 위해 controller action에 로직을 추가할 필요가 있다.

     

    Controller 클래스에 구성된 몇몇 public function controller action으로 작용한다. 이 부분은 신중히 처리해야 한다. 누구든지 그들의 웹 브라우저의 주소 바에서 올바른 URL을 통해 controller action을 호출 할 수 있다. 그렇게 때문에 당신이 호출되기를 원하지 않는 function이 있을 때 controller에서 public으로 function을 만들면 안 된다.

     

    Controller action ActionResult를 리턴 한다는 것을 명심해라. ActionResult은 해당 action이 하는 것을 의미한다. Index() Create() controller action MVC view을 리턴 한다. CreateNew() Complete() action 결과는 사용자에게 다른 controller action으로 바꿔주는 역할을 한다.

     

    controller들이 어떠한 작업을 하는지 설명하겠다. 당신이 create() controller action을 요청할 때, 새로운 일정을 만드는 폼을 구성하는 view가 리턴 된다. 당신이 이 폼에서 submit 했을 때 CreateNew() controller action이 호출된다. CreateNew() controller action은 새로운 일정을 데이터베이스에 추가하고 사용자에게 Index() controller action으로 리다이렉트한다. Index() controller action은 일정 전체 목록을 표시할 view을 리턴 한다. 마지막으로 당신이 완료 일정을 표시한다면, Complete() controller action이 호출되고 데이터베이스가 업데이트 된다. Complete() action은 사용자가에게 Index() action을 리다이렉트 하고 업데이트된 일정이 표시된다.

     

    Creating the Views

     

    View HTML markup과 브라우저로 보내는 콘텐트로 구성된다. View ASP.NET 어플리케이션에서 페이지에 가장 가까운 것이다. 당신은 확장자가 aspx인 파일을 만듦으로써 view를 만든다.

     

    당신은 올바른 위치에서 view을 구성해야 한다. 당신이 HomeController Index() action method을 위해 view를 만든다면 다음과 같은 경로 폴더 안에 view를 위치시켜야 한다.

     

    \Views\Home\Index.aspx

     

    만약 당신이 ProductController Price() action method을 위한 view을 만든다면, 다음 폴더에 위치시켜야 한다.

     

    \Views\Product\Price.aspx

     

    기본적으로 view은 그것이 일치하는 controller action 과 같은 이름을 가져야 한다. View은 항상 controller 이름과 일치하는 폴더 안에 위치해 있어야 한다.

     

    당신은 view의 서브 폴더에서 우 클릭을 통해 Add, New Item 메뉴를 선택하여 view을 만들 수 있다. View을 추가하기 위해 MVC View 페이지 템플릿을 선택해라. 우리는 다음 경로에 두 가지 view을 만들어야 한다.

     

    \Views\Home\Index.aspx

    \Views\Home\Create.aspx

     

    당신이 두 가지의 view을 만든 후, 당신의 솔루션 탐색기는 다음과 같을 것이다.

     

     



    View
    HTML content와 스크립트를 작성할 수 있다. Index.aspx view은 모든 일정의 리스트를 보여줄 것이다. View의 목적을 나타내기 위해, Index.aspx view에 다음 코드를 추가하자.

     

    <%@ Page Language="C#" AutoEventWireup="false" CodeBehind="Index.aspx.cs" Inherits="TaskList.Views.Home.Index" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns=http://www.w3.org/1999/xhtml > 

    <head runat="server">

    <title></title>

    </head>

    <body>

    <div>

    <h1>My Tasks</h1>

       ... displaying all tasks

       <a href="/Home/Create">Add new Task</a>

    </div>

    </body>

    </html>

    Index.aspx view은 현재 어떠한 일정도 표시하지 않는다. 우리는 이 튜토리얼 뒤에 Index.aspx에 일정 리스트를 표시할 스크립트를 추가할 것이다.

     

    Index.aspx view Add new Task로 명명된 링크를 포함하고 있다는 것을 명심해라. 이 링크는 /Home/Create 경로로 연결되어 있다. 당신이 이 링크를 클릭할 때, HomeController 클래스의 Create() action이 불리어 진다. (invoke) Create() 메소드는 Create View를 리턴한다.

     

    Create.aspx view은 새 일정을 만드는 폼으로 구성된다. View에 다음 코드를 작성하자.

     

    <%@ Page Language="C#" AutoEventWireup="false" CodeBehind="Create.aspx.cs" Inherits="TaskList.Views.Home.Create" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

         <head runat="server">

              <title></title>

         </head>

         <body>

              <div>

                   <h1>Add New Task</h1>

                   <form method="post" action="CreateNew">

                        <label for="description">Task:</label>

                        <input type="text" name="description" />

                        <br />

                        <input type="submit" value="Add Task" />

                   </form>

              </div>

         </body>

    </html>

     

    이 폼은 다음 URL 3 posts 리스트를 구성하는 것을 명심해라.

     

    /Home/CreateNew.aspx

     

    URL HomeController controller 위에 CreateNew() action에 대응한다. 새로운 일정을 나타내는 데이터 폼은 이 action에 의해 게시될 것이다.

     

    Creating the Database

     

    다음 단계로 우리의 일정을 저장할 데이터베이스를 만드는 것이다. 당신은 App_Data 폴더에서 우 클릭을 통하여, Add, New Item 메뉴를 선택하고 데이터베이스를 만들 수 있다. SQL Server 데이터베이스 템플릿 아이템을 선택하고, TaskListDB.mdf 라고 이름을 정하자.

     

    다음으로 우리는 일정을 저장할 데이터베이스 안에 테이블을 추가시켜야 한다. 솔루션 탐색기 안에 TaskListDB.mdf을 더블 클릭해라. 테이블 폴더에서 우 클릭을 하고, Add New Table 메뉴 아이템을 선택하자. 선택된 메뉴 아이템은 데이터베이스 테이블 디자이너가 열리고 다음과 같이 칼럼을 추가하자.

    Column Name

    Data Type

    Allow Nulls

    Id

    Int

    False

    Task

    Nvarchar(300)

    False

    IsCompleted

    Bit

    False

    EntryDate

    DateTime

    False

     

    첫 칼럼인 ID 칼럼은 두 가지 특별한 속성을 가지고 있다. 첫 번째로 당신은 Id 칼럼을 primary key 칼럼으로 만들어야 한다. 두 번째로 당신은 Id 칼럼을 Identity 칼럼으로 만들어야 한다.

     



    테이블이름은 Tasks 라고 하고 저장하자.

     

    (저는 SQL 상에서 데이터베이스를 만들고 서버 탐색기를 통해 연결했습니다.)

     

    Create the Model

     

    MVC Model은 당신의 어플리케이션과 데이터베이스 억세스 로직 대부분으로 구성된다. 일반적으로 당신은 Models 폴더 안에 당신의 MVC 어플리케이션이 포함된 클래스들이 놓여있다. View controller을 포함하지 않은 모든 당신의 어플리케이션 로직은 Models 폴더 안에서 밀어내야 한다.

     

    이 튜토리얼에서 우리는 전 섹션에서 만든 데이터베이스와 통신하기 위해 LINQ to SQL을 사용할 것이다. 일반적으로 나는 LINQ to SQL을 선호한다. 그러나 당신이 ASP.NET MVC 어플리케이션에서 LINQ to SQL을 사용하기를 강요하지는 않는다. 내가 언급한대로 당신은 다른 기술, 예를 들어 NHibernate 나 데이터베이스와 통신할 수 있는 프레임워크를 사용해도 된다.

     

    LINQ to SQL을 사용하기 위해 우리는 Models 폴더에 LINQ to SQL 클래스를 만들어야 한다. Models 폴더를 우 클릭하고 Add, New Item 메뉴를 선택하고, LINQ to SQL Classes 템플릿 아이템을 선택해라. 이름은 TaskList.dbml로 설정하자. 이 단계가 끝나면 Object Relational Designer가 나타날 것이다.

    우리는 Tasks 데이터베이스 테이블을 나타낼 single LINQ to SQL 엔티티 클래스를 만들어야 한다. 솔루션 탐색기에서 Tasks 테이블을 Object Relational Designer로 드래그 해라. 마지막 action Task 라는 이름의 새로운 LINQ to SQL 엔티티 클래스가 생길 것이다. 저장하자.

     


     

    Adding Database Login to the Controller Methods

     

    우리는 지금 데이터베이스를 가지고 있고, 우리의 controller action을 정의함으로써 우리는 데이터베이스에 일정을 저장할 수 있고, 검색할 수도 있다. 정의된 HomeController는 다음과 같다.

     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.Web.Mvc;

    using TaskList.Models;

     

    namespace TaskList.Controllers

    {

         public class HomeController : Controller

         {

              private TaskListDataContext db = new TaskListDataContext();

              // 일정 목록을 보여준다.

              public ActionResult Index()

              {

                   var tasks = from t in db.Tasks

                        orderby t.EntryDate

                        descending select t;

                   return View(tasks.ToList());

              }

              // 새 일정을 작성하는 폼을 보여준다.

              public ActionResult Create()

              {

                   return View();

              }

              // 데이터베이스에 새 일정을 추가한다.

              public ActionResult CreateNew(string description)

              {

                   // 데이터베이스에 새 일정 추가

                   Tasks newTask = new Tasks();

                   newTask.Task = description;

                   newTask.IsCompleted = false;

                   newTask.EntryDate = DateTime.Now;

     

                   db.Tasks.InsertOnSubmit(newTask);

                   db.SubmitChanges();

     

                   return RedirectToAction("Index");

              }

              // 완료된 일정을 표시한다.

              public ActionResult Complete(int Id)

              {

                   // 데이터베이스 로직

                   var tasks = from t in db.Tasks where t.Id == Id select t;

                   foreach (Tasks match in tasks)

                        match.IsCompleted = true;

     

                   db.SubmitChanges();

     

                   return RedirectToAction("Index");

              }

         }

    }

     

    위 코드에서 HomeController db라고 정의된 class-level private field을 가지고 있는 것을 알 수 있다. Db 필드는 TaskListDataContext 클래스의 인스턴스이다. HomeController 클래스는 TaskListDB 데이터베이스를 나타내기 위해 db 필드를 사용한다.

     

    Index() Controller action Tasks 데이터베이스 테이블로부터 모든 레코드의 검색이 정의된다. Tasks Index view를 통과한다.

     

    CreateNew() 메소드는 Tasks 데이터베이스 테이블에서 새로운 일정을 만듦을 정의한다. CreateNew() 메소드는 description으로 명명된 String 타입의 파라미터를 받는다는 것을 명심해라. 이 파라미터는 Create view를 지나가는 description 텍스트 폼 필드를 나타낸다. ASP.NET MVC 프레임워크는 자동적으로 파라미터 필드에서 controller action으로 통과된다.

     

    마지막으로 Complete() 메소드는 Tasks 데이터베이스 테이블에서 IsComplete 칼럼 값의 변화를 정의한다. 일정의 완료를 나타낼 때, task Id Complete() 메소드를 통과하여 데이터베이스를 업데이트 시킨다.

     

    Modifying the Index View

     

    Tasklist 어플리케이션을 완료하기 위한 마지막 작업이 남았다. 우리는 Index view을 수정하여 일정 목록을 나타내고 일정 완료를 표시하여야 한다. 수정된 Index view는 다음과 같다.

     

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="TaskList.Views.Home.Index" %>

    <%@ Import Namespace="TaskList.Models" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml" >

         <head runat="server">

              <title>Index</title>

         </head>

         <body>

              <div>

                   <h1>My Tasks</h1>

                   <ul>

                        <% foreach (Tasks task in (IEnumerable)ViewData.Model) { %>

                             <li>

                                  <% if (task.IsCompleted) {%>

                                       <del>

                                            <%= task.EntryDate.ToShortDateString() %>

                                            -- <%=task.Task %>

                                       </del>

                                  <% } else {%>

                                       <a href="/Home/Complete/<%= task.Id.ToString() %>">Complete</a>

                                       <%= task.EntryDate.ToShortDateString() %>

                                       -- <%=task.Task %>

                                  <% }%>

                             </li>

                        <% } %>

                   </ul>

                   <br /><br />

                   <a href="/Home/Create">Add new Task</a>

              </div>

         </body>

    </html>

     

    Index view는 모든 일정을 열거하는 C# foreach 루프를 가지고 있다. 이 일정들은 ViewData.Model 속성으로 나타낸다. 일반적으로 controller action에서 view로 데이터를 이동하기 위해 ViewData을 사용한다.

     

    루프 내에서 문법은 일정이 완료됨을 체크한다. 완료된 일정은 라인으로 보여진다. HTML <del> 태그는 완료 일정을 선으로 만들기 위해 사용된다. 일정이 완료되지 않았다면, 완료 링크 라벨은 일정의 다음을 표시한다. 링크는 다음 스크립트로 적용된다.

     

    <a href="/Home/Complete/<%= task.Id.ToString() %>">Complete</a>

     

    일정의 Id는 링크로 표현된 URL을 포함된다는 것을 명심해라. 일정 Id는 당신이 링크를 클릭했을 때 HomeController 클래스의 Complete() action을 통과한다. 이 방식으로 해당하는 데이터베이스 레코드는 당신이 완료 링크를 클릭했을 때 업데이트 된다.

     

    Index view의 마지막 버전은 다음과 같이 나타난다.

     


     

    Summary

     

    이 튜토리얼의 목적은 ASP.NET MVC 어플리케이션이 어떤 것인지를 맛보게 하는 것이다. ASP ASP.NET 어플리케이션을 만든 경험을 비추어 봤을 때 ASP.NET MVC 어플리케이션 제작이 매우 친근하다는 것을 발견했으면 하는 바램이다.

     

    이 튜토리얼에서 우리는 ASP.NET MVC 어플리케이션의 가장 기본적인 특징을 알아보았다. 앞으로의 튜토리얼에서는 우리가 controllers, controller action, views, view data 그리고 HTML Helpers 등에 대해 깊게 알아볼 것이다.

    Posted by glycerine
    ,