2010-08-01 87 views
1

我在我的MVC應用程序映射兩種途徑:我應該如何解決ASP.Net MVC路由映射衝突?

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Project", 
     "{controller}/{projectid}/{action}/{id}", 
     new { controller = "Project", action = "Index", id = "" }); 

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

} 

在大多數情況下,這些不構成問題,但我做的罷工麻煩試圖調用/帳號/ LogOn支持視圖時。我的ActionLink的語法看起來像這樣(我試過幾個變化,包括空路由值和這樣):

<%= Html.ActionLink("Log On", "LogOn", "Account") %> 

瀏覽這個觀點提出了一個404錯誤(「資源無法找到」)。理想情況下,我想避免大量返工,那麼避免這些衝突的最佳方法是什麼?

回答

1

您是否嘗試過使用控制器文字的這種變體?

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     "Project", 
     "Project/{projectid}/{action}/{id}", 
     new { controller = "Project", action = "Index", id = "" }); 

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

這會趕上:http://localhost/Project/12和​​和http://localhost/Project/2/View/2

但它會通過http://localhost/Account/LogOn到第二rounte。是?

+0

Gaaa!這總是最簡單,最明顯的答案。這是做到了。謝謝。 – 2010-08-02 12:25:55