2012-05-11 2 views
0

잠시 동안 ASP.NET을 수행했으며 거의 ​​MVC (일반적으로) 작업을 수행했지만 ASP.NET MVC 프레임 워크에서는 매우 새로운 작업을 수행했습니다. 뿐만 아니라 몇 가지 올바른 용어가 있습니다.ASP.NET MVC에서 중첩 /보기 라우팅에 대한 올바른 용어 및 예제

여기 내 예입니다 (실제로 사용하고있는 실제 응용 프로그램과는 다르지만 사용할 수있는 공개 예제입니다) .- Redmine의 더 간단한 버전을 만들고 싶습니다.

모든 프로젝트에서 example.org/issues에 가서 모든 문제 목록 (http://www.redmine.org/issues과 유사)을 볼 수 있도록 문제를 나열하고 싶습니다.

그러나 example.org/project/issues와 같이 프로젝트에 간다면 해당 프로젝트의 문제 만 볼 수 있습니다 (http://www.redmine.org/projects/redmine/issues과 유사). 이는 example.org/project2/issues 등에서 동일합니다.

올바른 용어는 무엇입니까? 나는 개발자가 두 곳에서 '이슈'코드를 다시 작성하지 않았고이 코드를 다시 사용했다고 가정합니다.

저는 완전히 정확한 용어를 모르기 때문에 ASP.NET MVC 세계에서 좋은 예제를 찾을 수 있습니다. 그래서 두 번째 부분은 ASP.NET MVC에서 볼 수있는 예제이며 Visual Studio에서 어떻게 보이게 될까요?

/project/아래에는 설정, 세부 사항, 로그 등과 같이 여러 가지가 있으며, 비슷하게 이동하는 방법은 http://www.redmine.org/projects/redmine/입니다.

마지막으로 프로젝트가 최상위 수준에 있지 않은 경우 어떻게해야합니까? 마찬가지로, 내 신청서가 더 비슷하다면 :

example.org/ 
example.org/projects/ 
example.org/projects/project1 
example.org/projects/project1/issues 
example.org/projects/project2 
example.org/dashboard/ 

답변

2

설정하면 (내가 RedMineController를 사용합니다) 원하는대로라는 하나의 컨트롤러.

해당 컨트롤러에는 ListIssues라는 단일 작업 메서드가 있습니다.

public ActionResult ListIssues(string projectName) {} 

이 마지막으로 당신의 global.asax.cs에 두 개의 경로를 만들 : 매개 변수라는 이름의 프로젝트 이름에 동의 == 프로젝트 이름 경우는 null을 확인, 당신의 ListIssues 액션에서

routes.MapRoute(
    "Issues Root", 
    "issues", 
    new { controller = "RedMine", action = "ListIssues" } 
); 

routes.MapRoute(
    "Project Issues", 
    "projects/{projectName}/issues", 
    new { controller = "RedMine", action = "ListIssues" } 
); 

를, 그래서 모든 문제를 얻는 경우 그렇지 않으면 특정 항목을 가져옵니다. 첫 번째 경로는 null을 전달하고 두 번째 경로는 URL에있는 경로를 전달합니다. URL의 프로젝트 이름이 유효하지 않은 경우 404를 버리는 것을 잊지 마십시오.

희망이 도움이됩니다.

+0

많은 것을 정리 했으므로 이전 주석을 삭제했습니다.처음에는이 경로가 기본값보다 먼저 필요하다는 것을 알았습니다. 두 번째로, 나는 그들이 모두 리드하는 곳이 될 것이라고 가정하는 listissues 뷰를 만들었다. 그런 다음이 코드를 다시 사용할 수있는 방법이 있습니까? 프로젝트 페이지에서 지난 10 개 문제점을 보여줍니다. – jmlumpkin

+0

routes.MapRoute를 호출하고 두 번째 매개 변수가 "issues"이지만 404가 표시되면 잘못된 것이 있습니다. 어쩌면 프로젝트가 변경된 후 다시 빌드되지 않은 것입니까? 잘못된 컨트롤러에 경로를 매핑 한 경우 자세한 유형의 오류 메시지가 표시되지만 404는 표시되지 않을 것으로 예상됩니다. – Roger

+0

예, 라우팅 때문이었습니다. 내 코멘트에있는 하위 목록 부분을 다른 질문으로 이동하려고합니다. – jmlumpkin

0

물론 적절한 ans. 하지만 당신은 당신이 당신이 그 일을하는 방법을 반대로하여 쉽게 원하는 것을 할 수 있습니다 .. 즉
대신 issueswww.example.org/project/issueswww.example.org/issues/project하거나 www.example.org/issues
이 방법으로 쉽게 URL에 issues 컨트롤러와 모든 것을 할 수 있습니다 할 일의 수 모든 문제를 나열해야하는 리소스를 결정할 수있는 문자열입니다. 그것을 위해 예를 들어 경로가 될 수

"{issues}/{*resource}",new{controller="issues"} 


관련 문제