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

  • 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
    ,