ASP.NET MVC Routing

 

블로그나 카페등에서 사용되는 확장자 없는 URL을 자유롭게 설정해 주는 기능

Global.asax에서 routes.MapRoute() 메소드를 통해 매핑규칙을 추가하면

http://www.mnstime.com/microsoft/aspnet/mvc/routing 와 같은 URL이 가능하다는 것이다.

 

RoutingGlobal.asax에서 설정을 한다.

Global.asax의 소스를 보면 다음과 같다.

 

public class MvcApplication : System.Web.HttpApplication

    {

        public static void RegisterRoutes(RouteCollection routes)

        {

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

            routes.MapRoute(

                "Default",                                              // Route name

                "{controller}/{action}/{id}",                           // URL with parameters

                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults

            );

        }

        protected void Application_Start()

        {

            RegisterRoutes(RouteTable.Routes);

        }

    }

 

프로젝트를 생성하면 Global.asax에 기본 routes.MapRoute() 이 설정되어 있다.

만약 URL /Home/Detail/10 로 요청이 들어오면 "{controller}/{action}/{id} 순으로

 

Controller

Home Controller

Action

Detail Method

Id

10 ( 5 Parameter )

이렇게 매핑이 된다.

 

이 매핑의 규칙은 Global.asax에서 routes.MapRoute() 통해 다양하게 설정할 수 있다.

URL 요청은 순서대로 다양하게 설정한 routes.MapRoute() 중에서 적용이 되는 제일 첫번째 설정으로 매핑이 된다.

 

Default Routing

MVC URL에 대한 Default Routing 다음과 같다.

 

Global.asax.cs

 

routes.MapRoute(

                "Default",                                              // Route name

                "{controller}/{action}/{id}",                           // URL with parameters

                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults

            );

 

다음은 URL에 대한 요청 설명이다.

http://localhost/ 라면 Paramter defaults로 인해 Home Controller Index Method를 호출한다.

http://localhost/Shop/List/ 라면 Shop Controller List Method가 호출된다.

http://localhost/Shop/List/1 라면 Shop Controller List Method 1값이 파라메터로 전달이 된다.

 

Customer Routing

Routing은 기본적으로 {controller}/{action}/{id} 형태로 구성되지만 다른 형태로 구성 할 수 있다.

 

Global.asax.cs

 

routes.MapRoute(

                "Plan",                                                     // Route name

                "Plan/{action}/{id}",                                       // URL with parameters

                new { controller = "Plan", action = "List", id = "" }    // Parameter defaults

            );

http://localhost/Plan/View/2

PlanMgt Controller View Method 2값이 파라메터로 전달이 되며 /Plan View.aspx를 호출한다.

그리고 List.aspx 뷰가 만들어져야 http://localhost/Plan/ 를 요청했을 경우 List.aspx가 호출이 된다.

 

Global.asax.cs

 

routes.MapRoute(

                "ShopProduct",                                                     // Route name

                "Shop/{controller}/{action}/{id}",                                       // URL with parameters

                new { controller = "Product", action = "Index", id = "" },    // Parameter defaults

                new { controller = "(Product)|(Product2)" }

            );

 

※ 중요

Route를 여러개 지정하여 사용할 경우 위에서부터 차례대로 해석하는데 Default Route이 최상단으로 올리는 경우 Default Route에서 URL을 해석하여 페이지 에러가 발생하게 된다.

Customer Route를 생성했을 경우에는 먼저 Customer Route를 넣어준 후 Default Route를 넣어주는게 좋은 방법이다.

 

 

URLController 찾기

http://localhost/Shop

기본으로 Product Controller Index Method를 호출하여 /Product Index.aspx를 호출한다.

 

http://localhost/Shop/Product2/

Product2 Controller Index Method를 호출하여 /Product Index.aspx를 호출한다.

 

http://localhost/Shop/Product3/

Product3 Controller가 존재하지 않아 오류가 발생한다.

 

 

URLParameter 전달하기

http://localhost/Shop/Product/Index/Hello

Controller Index Method Hello파라메터값을 전달하여 Index.aspx를 호출한다.

값의 전달을 위해 소스를 아래와 같이 수정하였다.

 

ProductController.cs

 

        public ActionResult Index(string id)

        {

            ViewData["ProductParam"] = id;

            return View();

        }

 

Index.aspx

 

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

  

간단하게 하나의 파라메터 값을 전달하였다.

 

 

응용해서 2개의 파라메터를 전달하려면 어떻게 해야 할까?

http://localhost:7002/Shop/Product/Index/Hello/Hi

 

Global.asax.cs

 

            routes.MapRoute(

                "ShopProduct",                                                     // Route name

                "Shop/{controller}/{action}/{id}/{id2}",                                       // URL with parameters

                new { controller = "Product", action = "Index", id = "", id2 = "" },    // Parameter defaults

                new { controller = "(Product)|(Product2)" }

            );

 

ProductController.cs

 

        public ActionResult Index(string id , string id2)

        {

            ViewData["ProductParam"] = id;

 ViewData["ProductParam2"] = id2;

            return View();

        }

 

Index.aspx

 

<%=Html.Encode(ViewData["ProductParam"]) %> / <%=Html.Encode(ViewData["ProductParam2"]) %>

 

 

 

Views Win Form 추가하기

지금까지는 그림에서 처럼 Views/ProductView 항목을 통해 Page를 추가했다.

 

지금은 새 항목을 통하여 Web Form을 추가하는 것을 해보겠다.

 

 

새 항목을 클릭 후 Web Form 선택하여 Detail.aspx라는 Web Form을 만들자.

다음으로 Product Controller Detail Action을 만들어 연결을 해보자

Product Controller.cs

 

        public ActionResult Detail()

        {

            return View();

        }

 

 http://localhost:7002/Shop/Product/Detail URL을 입력하면 다음과 같은 에러가 출력된다.

Detail.aspx ViewPage의 상속을 받지 않아서 생기는 문제이다.

  

Detail.aspx.cs의 코드를 수정하자.

Detail.aspx.cs

 

using System.Web.Mvc; // 추가

 

namespace MvcMyApplication.Views.Product

{

    public partial class Detail : ViewPage //System.Web.UI.Page 를 변경

    {

        protected void Page_Load(object sender, EventArgs e)

        {

 

        }

    }

}

 

'Web Platform' 카테고리의 다른 글

ASP.NET MVC TagBuilder  (0) 2009.06.29
ASP.NET MVC View  (0) 2009.06.29
ASP.NET MVC 개발 환경 만들기  (0) 2009.06.29
ASP.NET MVC(Model, View, Controller)란?  (0) 2009.06.29
날짜 관련 함수  (0) 2009.06.29

ASP.NET MVC Web Application 만들기

 

새로운 MVC 프로젝트를 만들기 위해서는 아래와 같은 환경이 준비되어야 한다.

1.      Microsoft Visual Studio2008

2.      .NET Framework 3.5 SP 1

3.      ASP.NET MVC 1.0

4.      IIS 7.0 (IIS 6.0 이상)

 

 

ASP.NET MVC 1.0http://www.asp.net/MVC/ 에서 다운 받을 수 있다.

버튼을 클릭하면 Web Platform Installer 2.0 Beta를 설치한다.

 

 

설치를 완료 하면 아래와 같은 화면이 나온다.

 

Web Platform -> Frameworks and Runtimes Customize를 선택하면

ASP.NET MVC 1.0 .NET Framework 3.5 SP1를 체크한 후 Install을 하면 설치가 된다.  

 

 

이제 환경이 준비 되었으니 새로운 MVC 프로젝트를 만들어보자.

 

 

Microsoft Visual Studio2008을 실행 한 후 새 프로젝트를 선택하면 아래와 같이 ASP.NET MVC Web Application이 생성된 것을 볼 수 있다.

 

 

 

MvcMyApplication 이름으로 새 프로젝트를 생성하자.

다음과 같은 화면이 나오는데 No, do not create a unit test project를 선택 -> OK

(Yest, create a unit test project를 하게 되면 단위테스트를 위한 프로젝트가 같이 생성이 된다.)

 

Ctrl + F5를 눌러 실행해보자.

 

이렇게 해서 하나의 MVC Application을 만들어보았다

 

 

'Web Platform' 카테고리의 다른 글

ASP.NET MVC View  (0) 2009.06.29
ASP.NET MVC Routing 기술  (0) 2009.06.29
ASP.NET MVC(Model, View, Controller)란?  (0) 2009.06.29
날짜 관련 함수  (0) 2009.06.29
JavaScript를 이용한 정규식 표현  (0) 2009.06.29

MVC란 객체지향언어인 Smalltalk에서 도입되었다.

 

MVC의 세부분의 구성은 다음과 같은 역활을 한다.

 

1. Model(Biz 로직

비즈니스를 처리한다. 데이터 부분의 클래스 및 논리적인 데이터 기반 구조를 표현

2. View(Biz의 프리젠테이션)

사용자가 보게 될 결과 화면을 담당한다.

3. Contoller(흐름제어)

Model View와의 통신을 담당한다.


MVC 어플리케이션을 만들기는 결정할 때

ASP.NET MVC framework 인지 혹은 ASP.NET Web Forms 모델 인지를 결정하는 것은 주의 깊게 고려해야 한다.

MVC framework ASP.NET Web Forms을 교체하지는 않는다.

결정하기 이전에 웹 어플리케이션에 주는 이점을 살펴야 한다

 

ASP.NET MVC 기반 웹 어플리케이션은 다음과 같은 이점을 제공한다.

* Model, View, Controller가 분리되어 있으므로 관리의 복잡성이 줄어든다.

* View State Server Based Control을 사용하지 않는다. 이것은 어플리케이션의 동작을 완전히 제어하려는 개발자들에게 이상적이다.

* 좀더 나은 Test-Driven Development의 지원

* 높은 수준의 제어가 필요한 개발자와 설계자들의 큰 팀을 지원하는 Web 어플리케이션에 적합

 

Web Forms 기반 웹 어플리케이션은 다음과 같은 이점을 제공한다.

* HTTP를 통해 상태를 저장하는 이벤트 모델을 제공한다. 서버컨트롤에서 지원하는 수만은 이벤트들을 지원한다.

* 상태정보를 쉽게 관리할 수 있는 View Status 또는 Server-based Forms를 제공한다.

* 많은 수의 컴포넌트를 빠르게 개발하려는 개발자 및 설계자들의 작은 팀에 적합.

* 일반적으로 컴포넌트가 긴밀하게 통합되어 있고 MVC 모델 보다 적은 코드가 필요하기 때문에 개발의 복잡도가 적다

 

MVC 어플리케이션에서는 더 이상 ViewState와 포스트백을 사용하지 않는다.

 

'Web Platform' 카테고리의 다른 글

ASP.NET MVC Routing 기술  (0) 2009.06.29
ASP.NET MVC 개발 환경 만들기  (0) 2009.06.29
날짜 관련 함수  (0) 2009.06.29
JavaScript를 이용한 정규식 표현  (0) 2009.06.29
location.href 와 location.replace의 차이  (0) 2009.06.29

+ Recent posts