2011-03-01 7 views
1

Google에서 검색 한 결과 (잘못된 키워드 일 수 있음) ASP.NET/MVC 웹 사이트의 자습서를 방문했습니다. 그러나 MVC의 라우팅을 제대로 이해하지 못했습니다. 다음 그림과 같은 시나리오가 있습니다. 웹 사이트가 점심을 먹었을 때 Index.cshtml을 표시하고 싶습니다.

enter image description here하위 폴더에있는 ASP.NET MVC 사용자 지정 라우팅

저는 Global.asax.cs 파일의 RegisterRoutes 메서드를 다양한 방법으로 변경했습니다. 누군가가 내 문제에 대답과 함께 다른 예와지도 노선 방법을 설명하면 나는 매우 행복 할 것이다

routes.MapRoute(
      "App", // Route name 
      "App/{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

이하 (작동하지 않는) 최신 코드입니다.

답변

1

ASP.NET MVC 3에는 하위 폴더에 대한 기능이 내장되어 있습니다. 그게 지역 (감사합니다 @ 모르 텐 나를 위해 단어를 알려주는)라고합니다.
하지만 Area의 MSDN Walkthrough을 마친 후에도 웹 응용 프로그램을 실행할 수 없었습니다. 오류는 구성 오류입니다. @ 대니는 또한 그것을 알아 차렸다.
그런 다음 검색 한 결과 웹입니다.하위 폴더의 구성 파일에는 응용 프로그램 관련 속성이 포함되어서는 안됩니다.
그래서 Web.config 파일에서 해당 속성을 제거했습니다. 그 때 나는 달릴 수 있었다. 그러나 하위 폴더/영역보기로 이동할 때 런타임 오류가있었습니다. 오류는 "영역로드보기를위한 링크를 클릭하면"System.Web.Mvc.ViewPage < .. <> ' "을로드 할 수 없습니다.
그런 다음 다시 검색하여 유용한 this 게시물을 찾았습니다. 그런 다음 내 애플리케이션이 성공적으로 실행되고 모든 페이지를 탐색 할 수 있습니다.

+0

@ Morten의 의견 앞에 Area를 만들려고했는지 묻는 첫 번째 편집;) 다행 이군. – DannyLane

+0

@ 대니 : 형, 그 당시 키워드를 몰랐어. :) –

2

경로에 문제가 있다고 생각하지 않습니다.보기 및 컨트롤러 폴더를 App 폴더로 옮겨서 문제가 발생한 것 같습니다.

MVC는 "컨벤션 오버 컨벤션"을 사용하여 폴더가 어디에 있는지와 같이 새 폴더에서 뷰/컨트롤러를 찾을 수 없다고 생각합니다. here에서

:

기본적 으로 ASP.NET MVC 프레임 워크 방법은 "설정보다 관례"를 사용하고 일부를 만들기 때문에이 폴더는 빈 ASP.NET MVC 응용 프로그램도 포함되어

기본 폴더 이름은 이며 폴더 이름은 입니다. 예를 들어 컨트롤러 코드를 명시 적으로 지정하지 않고도 Views 폴더에서보기를 기본값으로 찾으십시오. 기본 규칙을 준수하면 코드가 필요하므로 코드를 으로 작성해야하고 다른 개발자가 프로젝트를 쉽게 이해할 수 있습니다.

나는 당신과 같은 폴더 구조를 가질 수 없다는 말은 아니지만, 나는 그 상자에서 지원한다고 믿지 않습니다. 개인적으로 나는이 구조를 유지해야 할 필요가 있다면 자신의 ControllerFactory와 ViewEngine을 구현해야 할 필요가 있다고 생각한다면 기본값으로 되돌릴 것을 권한다. (이것들이 바뀌어야 할 올바른 후크인지 확실하지 않다.).

편집 : 영역으로 응용 프로그램을 구현하려고합니까?

Edit2 : 영역으로 응용 프로그램을 추가하려는 경우 따라야 할 몇 가지 단계가 있습니다.이 영역이 내가 의도 한 바가 확실하지 않은 이유는 영역을 고려해야하기 때문입니다. Areas 폴더 내에 존재해야합니다. 몇 가지 단계 개요가 있습니다. here 지역을 등록하는 방법이 포함되어 있다면이를 포함하는 것이 좋습니다.

+0

구조는 영역을 사용하여 정확하게 맞습니다. 게시물을 편집하여 앱 영역을 정의하고 등록하는 방법을 보여줍니다. 누군가가 당신을 이기지 않는 한 저에게 upvote를 보냅니다.) –

+0

그런 종류의 폴더를 사용하려면 적절한 네임 스페이스를 다음에 추가해야합니다. defaultcontrollerfactory를 만들고 올바른 폴더를보기 위해 사용자 정의 ViewEngine (RazorViewEngine에서 상속)을 생성하십시오. 어쩌면 당신은/App/Home/ –

+0

과 같은 경로를 사용하기를 원한다면 더 쉽게 지역을 만들려고합니다. @Morten Mertner 지역 폴더에서 지역을 정의해야한다고 생각 했습니까? 그게 내가 의도가 뭔지 잘 모르겠다. Areas 폴더에 대해 올바르지 않으면 정정 해주십시오. – DannyLane