2012-01-13 4 views
2

NerdDinner 튜토리얼을 기반으로 MVC 3에서 시스템을 만들었습니다. 나는 Routing을 완전히 이해하고 있는지 확신 할 수 없다.ASP.NET MVC 3 - 경로 이해 어려움

내가 가지고있는 페이지 매김 도우미에 정렬을 추가 할 때까지 모든 것이 잘 작동하고있었습니다. 여기

는 global.asax.cs

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

    routes.MapRoute(
     "UpcomingKeyDates", // Route name 
     "KeyDates.mvc/{sortBy}/Page/{page}", // URL with parameters 
     new { controller = "Home", action = "Index" } // Parameter defaults 
    ); 

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

    routes.MapRoute(
     "Root", // Route name 
     "", // URL with parameters 
     new { controller = "Home", action = "Index", sortBy = "EventDate" } // Parameter defaults 
    ); 

} 

내가 먼저 (잘 작동하는) 페이지를 탐색 할 때 이벤트 날짜 오름차순으로 정렬 목록을 기본 할 것입니다. 정렬 및 페이지 매김도 제대로 작동합니다. 그러나이 링크를 사용하면 ...

<%: Html.ActionLink("Create New", "Create", "Home") %> 

링크는 단지 동일한 페이지로 연결됩니다. 새 경로를 추가하거나 기존 경로를 수정해야합니까? 어떤 도움을 많이 주셨습니다.

감사합니다.

답변

1

기본 경로는 항상 마지막에 나타나야하며 포괄 경로입니다. 페이지가 될 수를가는 경우 자동으로 항상 다음과 같은 형식 또한

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "foo", action = "bar", id=UrlParameter.Optional } 
); 

을해야 http://yourdomain.com/

기본 경로에 해당 빈 경로를 잡을 것입니다, 당신은을 사용하여 제한 할 수 정규 표현식 (아래 참조).

간단히 말해서, 당신의 Global.asax은 그래서 다음과 같습니다 변경 : 매력을 작동

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

    routes.MapRoute(
     "UpcomingKeyDates", // Route name 
     "KeyDates.mvc/{sortBy}/Page/{page}", // URL with parameters 
     new { controller = "Home", action = "Index" }, // Parameter defaults 
     new { page = @"\d+" } // Note I have constrained the page so it has to be an integer... 
    ); 

    routes.MapRoute(
     "MyDefaultRoute", // Your special default which inserts .mvc into every route 
     "{controller}.mvc/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id=UrlParameter.Optional, sortBy = "EventDate" } // Parameter defaults 
    ); 

    routes.MapRoute(
     "Default", // Real default route. Matches any other route not already matched, including "" 
     "{controller}/{action}/{id}", // URL with parameters 
     new { controller = "Home", action = "Index", id=UrlParameter.Optional, sortBy = "EventDate" } // Parameter defaults 
    ); 
} 
+0

합니다. 매우 감사합니다! 어떻게 알았을 때 쉽게! :-) –

+0

걱정하지 않아도됩니다. 기꺼이 도와 드리겠습니다. 라우팅은 아마도 MVC에서 가장 힘든 일입니다! :-) –