2009-07-31 1 views
2

내 동적 데이터 사이트가 ASP.NET MVC 프로젝트에서 실행되도록하려면 올바른 Global.asax 설정이 필요합니다. 라우팅은 현재 내 문제인 것으로 보입니다. 내가 사용하려고 해요동적 데이터 웹 폼 페이지에서 ASP.NET MVC 앱 라우팅이 작동하지 않습니다.

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    MetaModel model = new MetaModel(); 
    model.RegisterContext(typeof(Models.DBDataContext), new ContextConfiguration() { ScaffoldAllTables = true }); 
    routes.Add(new DynamicDataRoute("DD/{table}/{action}.aspx") { 
     Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }), 
     Model = model 
    }); 

    routes.MapRoute(
     "Assignment", 
     "Assignment/{action}/{page}", 
     new { controller = "Assignment", action = "Index", page = "" }); 

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

} 

링크는 다음과 같습니다 :

http://localhost:64205/DD/Work_Phases/ListDetails.aspx

내가 무엇입니까 여기

내 Global.asax에있다 다음 메시지 :

'/'응용 프로그램의 서버 오류입니다. 리소스를 찾을 수 없습니다. 설명 : HTTP 404입니다. (또는 해당 종속성 중 하나)이 일 수 있고, 이름이 이거나, 임시로 을 사용할 수 없게 될 수 있습니다. URL에있는 을 검토하고 철자가 올바른지 확인하십시오.

요청 된 URL : 나는 응용 프로그램의 내부 폴더부터 DynamicData와 DD를 대체하려고했습니다 /DD/Work_Phases/ListDetails.aspx

이 DynamicData이며, 그 동일한 결과를 얻었다.

+0

어떤 경로를 찾으려고합니까? –

+0

@Adrian : DD/Work_Phase/ListDetails.aspx에 접근하려하지만 페이지가 올라 오지 않습니다. – RSolberg

답변

3

http://localhost:64205/DD/Work_Phases/ListDetails.aspx 

은 "DD"라는 컨트롤러를 공격하려고하는 두 번째 (기본) 경로를 일치되는 URL. 내가 상상할 수 있지만 당신이 페이지 매개 변수를 전달해야하는 이유 ...

routes.MapRoute(
    "DD", 
    "DD/{action}/{page}", 
    new { controller = "NameOfController", action = "Index", page = "" } 
); 

:

당신은 다음과 같은 형태 다른 경로 항목을해야 할 수도 있습니다. 적중 된 페이지 뷰는 컨트롤러 메소드의 리턴 액션에 따라 달라집니다. ASP.NET MVC와 동적 데이터를 통합에서 더 나은 모습을 위해


는, 그는 MVC의 일부가 아닌 .ASPX 파일 처리에 대한 몇 가지 세부 사항을 가지고 Scott Hanselman's Plugin-Hybrids article. 살펴 있습니다. 특히 ASP에서 처리하지 않으려는 .ASPX가있는 경우NET MVC 컨트롤러는, 당신은 무시 경로를 설치할 수 있습니다

routes.IgnoreRoute("{myWebForms}.aspx/{*pathInfo}"); 

ASP.NET MVC 스콧의 IgnoreRoute 기술하지만, 물리적으로 디스크에있는 파일에 대한 URL 요청을 무시하는 상자 밖으로 구성되어 있음을 주목해야한다 분명히 더 효율적입니다.

+0

경로 추가, 운 없음 – RSolberg

+0

새 경로와 일치해야합니다. DD가 URL의 첫 번째 부분과 일치하면 Work_Phases가 컨트롤러의 메서드 이름에 매핑되고 NameOfController는 컨트롤러의 이름이어야합니다 (경로에서 컨트롤러라는 단어는 생략하십시오). –

0

ASP.NET MVC가 작동하려면 액세스하려는 URL과 경로 목록을 일치시켜야합니다. 현재 Global.asax에 대한

유효한 URL의 예는 다음과 같습니다.

http://domain/AnyController/AnyAction/AnyParameter 
http://domain/Assignment/ 
http://domain/Assignment/AnyAction/AnyParameter 

전달로 MVC 요청이 매개 변수를 사용하여, 적절한 컨트롤러 클래스, 액션 메소드로 리디렉션됩니다 MVC 요청이 하지 리디렉션됩니다 모든 ASPX 클래스에. 이것은 ASP.NET MVC와 바닐라 ASP.NET 페이지의 차이점입니다.

3

url은 사용자가 입력 한 제약 조건에 맞지 않기 때문에 동적 데이터 경로와 일치하지 않습니다. 당신은 행동 ListDetails를 요청하고 있지만 이러한 작업은

Constraints = new RouteValueDictionary(
        new { action = "List|Details|Edit|Insert" } 

편집을 사용할 수 있습니다 : 당신이 액션이 ListDetails 존재라는 것을 확신? 그럼 그냥 기본 작업 중 하나를 시도 할 수 있습니다, 그것은 경로를 무시 일으키는 제약입니다 있는지 확인하기 위해

Constraints = new RouteValueDictionary(
        new { action = "ListDetails|List|Details|Edit|Insert" } 

에 위의 제약 조건을 수정? 예 :

http://localhost:64205/DD/Work_Phases/List.aspx