Friday, December 10, 2010

[ASP.NET MVC] Areas 사용시 ActionLink 방법

Areas를 이용할 경우 ActionLink 사용시 다른 Areas로 이동하기 위한 별도의 매개변수가 보이지 않아 당황하게 된다. 이 경우 area 지정을 위한 별도의 매개변수가 존재하지 않지만, Route에 대한 이해만 가지고 있으면 해법이 보이게 된다. url 요청 정보는 RouteData에 캡슐화 되는데, 이 부분을 이용하면 간단하게 작성이 가능하다.  

Page 속성인 RouteData에는 RequestContext의 RouteData를 가져온다. 여기에는 Controller와 Action 값이 등록되어 있다. Url을 생성할때도 이 RouteData를 토대로 작성되어 지는데, 파라메터가 추가된 경로를 생성하기 위해 종종 RouteValueDictionary(IDictionary를 구현하는…)를 설정해 주기도 한다.

<%:Html.ActionLink(“수정하기”, “Modify”, new { id = 1 }) %>

{controller}/{action}/{id} 형식과 같은 기본 Route가 설정되어 있을 경우, url은 다음과 같이 생성될것이다.

http://[domain]/Board/Modify/1

만약 new { id = 1 } 대신 new { articleId = 1} 을 사용할 경우 url은…

http://[domain]/Board/Modify?articleId=1

이와 같이 생성될것이다.

마찬가지로 new { area = “admin”} 을 설정해보면…

“admin” 이라는 이름을 가진 영역이 있는지를 찾게 된다. 예를 들어 관리자 페이지가 admin이라는 영역에 들어있을 경우, 관리자 페이지 접근을 위한 ActionLink는 다음과 같이 작성 가능하다.

<%:Html.ActionLink(“관리자 접속”, “Index”, “Home”, new { area = “admin” }, null) %>

이 경우 admin이라는 이름을 가진 영역의 Home 컨트롤러의 Index 액션메서드를 호출하게 된다.