2011-10-06 3 views
2

레일 배경에서 왔습니다. Microsoft의 MVC 프레임 워크에서 머리를 감싸는 데 문제가 있습니다.ASP.NET MVC3 영역 내 중첩 된 리소스

오늘은 라우팅입니다. 레일스는 .NET MVC3의 영역과 동일한 네임 스페이스 (예 : Admin)를 제공합니다. Rails는 또한 예를 들어/posts/1/comments/1/edit를 제공 할 루트 내에서 중첩 된 자원을 정의 할 수있게하며 기본적으로 params [: post_id] 및 params [: id]를 얻습니다.

ASP.NET MVC3에서 이와 비슷한 작업이 필요하지만이 작업을 수행하는 방법은 확실하지 않습니다. 이를 위해 검색을 수행하는 데는 적어도 30 가지의 다른 방법이 있으며 그 중 일부는 영역을 언급하지 않습니다.

그것은 내가 여기에서 뭔가를 추가/수정해야 같은 느낌 :

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Admin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

그러나 확실하지 않다. 어떤 제안?

답변

2

나는 올바른 파일 (귀하의 AreaRegistration.cs 파일)에 있다고 생각합니다. 나는 그들이 제공하는 경로의 기본 '모두 포착'유형을 사용하는 것이 아니라 내 경로를 좀 더 노골적으로 표현하는 것을 선호합니다.

당신의 CommentController에

context.MapRoute(
    "Edit_Comment", 
    "posts/{postId}/comments/{commentId}/edit", 
    new { controller = "Comment", action = "Edit" } 
); 

그런 다음 RegisterArea 방법으로 기존의 경로 전에이 같은 추가 (또는 모두 함께 기존 제거) : 그래서 여기에 나는이 처리 할 것입니다 방법의 예 .cs를 사용하면 다음 작업을 수행하게됩니다.

public ActionResult Edit(int postId, int commentId) 
{ 
    // Do your edit logic then return an ActionResult 
} 
+0

답변 주셔서 감사합니다. MVC3 및 지역의 Resources에서 일해 보셨습니까? 즉 - http://stevehodgkiss.com/posts/restful-routing-for-asp-net-mvc-2 –

+0

mvc3의 리소스로 작업하지 않았습니다. 우리의 URL이 구조화되어있는 방식으로 그것은 실제로 잘 맞지 않을 것입니다. 우리는 대부분의 데이터를 경로 값을 사용하지 않고 get 또는 post 매개 변수를 통해 전달합니다. – bbak

+0

설명해 주셔서 감사합니다. 건배! –