MVC에서 Controller는 사용자의 요청을 받아들여 처리하는 첫 관문이다
웹 Request로부터 Get paramerter나 POST data를 사용해 Models에서 데이터를 조회하거나 저장할 수 있으며 해당 결과를 사용자에게 반환한다
일반적으로 HTML을 반환하는데, 이때 Controller는 데이터를 View에 전달한다
이처럼 Controller는 사용자, Model/View와 긴밀하게 상호작용하면서 전체 흐름을 제어한다
Model, View, Controller는 MVC Framework에서 지정한 폴더 밑에 생성되어야 한다
컨트롤러는 /Controllers 폴더에 생성하며
System.Web.Mvc.Controller 클래스로부터 상속되어 Framwork에서 제공하는 다양한 기능들을 사용하게 된다
HomeController 클래스 안의 각 메서드는 하나의 웹 페이지에 해당한다
각 웹페이지는 /{컨트롤러명}/{메소드명}으로 접근할 수 있다
메소드명은 ActionResult(혹은 그 파생클래스)를 리턴하는 public 메소드에 대한 이름이다
새로운 컨트롤러를 추가하기 위해선 Controllers 폴더에서 마우스 우클릭 후 Add -> Controller를 선택한다
다음 화면에서 여러 템플릿이 나오며 이를 사용하면 기본적인 코드를 자동으로 생성해줘 Scaffold라 부른다
Action 메소드는 웹 Request를 받아들여 어떤 처리를 한 후 출력물인 ActionResult 객체를 리턴한다
Controller.View() 메소드는 /Views/{컨트롤러명}/{메소드명} 파일을 랜더링하여 결과인 ViewResult(ActionResult의 파생 클래스) 객체를 리턴한다
using System.Web.Mvc;
namespace WebApplication1.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View(); // MVC의 Controller 베이스 클래스의 View() 메소드
}
public ActionResult About()
{
ViewBag.Message = "Your application description page.";
return View();
}
}
}
Controller에서 Model 클래스를 사용하는 방법은 C#에서 임의의 클래스를 사용하는 방법과 같다
Controller에서 View로 데이터를 전달하기 위해선 ViewBag, ViewData 또는 Model 객체를 넘기는 방법이 있다
Controller는 HTML 외에 파일, 문자열, JSON, JS 등을 리턴할 수도 있고, 다른 URL로 redirect 할수도 있다
모든 Action 메소드는 ActionResult 객체를 리턴하는데, 이는 추상클래스로 다음과 같은 파생 클래스들을 갖는다
문자열 리턴은 ContentResult 객체를 사용한다
자주 사용되는 Result들에 대해 Mvc.Controller에서 Wrapper 메소드를 제공해준다
public ActionResult NewGuid()
{
string guid = Guid.NewGuid().ToString();
var result = new ContentResult();
result.Content = guid;
return result;
}
// Wrapper Method: Content()
public ActionResult NewGuid()
{
string guid = Guid.NewGuid().ToString();
return Content(guid);
}