블로그 이미지
Sunny's

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

2010. 7. 8. 02:28 ASP.NET

ASP.NET MVC2 프레임웍의 AREA 기능을 사용하면 기존의 MVC1 버전에서는 제약이 있었던 URL 문제를 손쉽게 해결할 수 있다.
그런데 만약 AREA상에 있는 컨트롤러의 이름과 ROOT 프로젝트상에 있는 컨트롤러의 이름이 중복되게 되면 "Multiple types were found that match the controller named~~~~ "와 같은 예외가 발생한다.

예를 들면 아래와 같은 경우이다.

http://localhost/Admin/Department/Index       ==> Admin 이라는 Area 이름을 사용

http://localhost/Department/Index                 ==> Root 프로젝트의 컨트롤러 이름을 사용

위의 경우 Department라는 컨트롤러 이름이  Root 프로젝트와 Area에 각각 존재하게 되며 이런 경우 에러가 발생한다.

예외의 내용은 말그대로 컨트롤러 이름이 중복되어 있으니 확실하게 네임스페이스를 지정해 달라는 것이며
해결 방법은 매우 간단하다.

Global.asax 에서 중복된 ROOT 컨트롤러에게 네임스페이스를 명확히 지정해 주면된다.

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 = UrlParameter.Optional }, // Parameter defaults
                new string[] { "MvcApplication5.Controllers" }  // ---> 네임스페이스를 명확히 지정한다.
            );

        }


Note that you don't need to add namespace for Area's controller name in the XXXAreaRegistration class.


posted by Sunny's
prev 1 next