2012-01-13 56 views
2

我已經在MVC 3中使用NerdDinner教程作爲基礎來創建系統。我不確定我完全理解路由。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

默認路由應該總是最後出現,並且是全部路由。它會自動捕捉空航線,相當於http://yourdomain.com/

默認路由應該始終具有以下格式

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

而且,如果該頁面將是一個號碼,就可以使用約束它正則表達式(見下文)。

總之,改變你的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

一個可行的魅力。非常感謝!很容易,當你知道如何! :-) – 2012-01-13 09:31:31

+0

不用擔心,很樂意幫忙。路由可能是MVC中最難的事情! :-) – 2012-01-13 10:27:07