문제

다음 시나리오를 처리하는 방법을 알아 내려고 노력합니다. 일반적으로 테이블에 많은 레코드가 있습니다. 이들 모두에는 나무를 형성하기 위해 ID와 ParentID 필드가 있습니다.

Page1
 - Page2
 - Page3
Page4
 - Page5
 -- Page6

이제 Page3과 Page6의 경로가 /Page1/Page6 그리고 /Page3/Page5/Page6 각자. 즉, URL에 모든 부모를 포함하고 싶습니다.

위의 결과를 달성하기 위해 컨트롤러 작업/라우팅을 설정하는 방법은 무엇입니까?

편집 : 위의 구조가 동적이라는 것을 언급하는 것을 잊어 버렸습니다. 노드를 추가/삭제/변경 부모 등을 변경할 수 있습니다.

도움이 되었습니까?

해결책

와일드 카드 일치를 사용할 수 있습니다.

가능한 경로 :

routes.MapRoute("SomeName", "{*Page}", new { controller = "ControllerName", action = "ActionName" });

그리고 동작에서 문자열 페이지를 수락하고 아마도 스플릿으로 수동으로 구문 분석 할 수 있습니까?

이것은 또한 유용 할 수 있습니다. URL 라우팅

다른 팁

컨트롤러 이름과 동작은 URL을 기반으로하지 않고 고정되어 있습니다.

// place the more specific route first
routes.MapRoute("r1", "{parent}/{child}/{subchild}", 
    new { controller = "Page", action = "Index", parent = parent, child = child, subchild = subchild });

routes.MapRoute("r2", "{parent}/{child}", 
    new { controller = "Page", action = "Index", parent = parent, child = child });


public class PageController
{
    public ActionResult Index(string parent, string child, string? subchild)
    {
        // stuff
    }
}

당신은 사용해야합니다

routes.MapRoute("Page6", "Page3/Page5/Page6", new { controller = "Page6", action = "Index" });

또는 정규 표현 라우팅을 사용 할 수도 있습니다

http://blog.sb2.fr/post/2009/03/regular-expression-maproute-with-aspnet-mvc.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top