2012-07-17 67 views
1

我有一個名爲HomeController的控制器,一個名爲Home的文件夾和一個名爲Index的視圖。我還有另一個名爲TestEditController的Controller,一個名爲TestEdit的文件夾和一個名爲Index的View。出於某種原因,當我編譯它時,URL:http://localhost:4097/不指向Home/Index,而是指向TestEdit/Index。我去了「屬性」>「開始操作」>「特定頁面...」,並將文本框留空。注意:放置/不起作用。我已經清理,構建,重建項目/解決方案。但仍然遇到同樣的問題。這是我的Global.asax文件:爲什麼編譯MVC在錯誤的控制器上啓動?

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

     routes.MapRoute(
      "SectionsData", // Route name 
      "{controller}/{action}/{id}/{prodno}/{instid}/{section}", // URL with parameters 
      new { controller = "TestEdit", action = "Sections", id = UrlParameter.Optional, prodno = UrlParameter.Optional, instid = UrlParameter.Optional, section = UrlParameter.Optional } // Parameter defaults 
     ); 

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

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

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

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

    } 
+1

這些路線將首先進行比賽。由於TestEdit路由的所有URL參數都是可選的,因此它首先匹配。 – 2012-07-17 20:16:21

回答

3

您的匹配過於一般。試試這個:

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

    routes.MapRoute(
     "SectionsData", // Route name 
     "TestEdit/Sections/{id}/{prodno}/{instid}/{section}", // URL with parameters 
     new { controller = "TestEdit", action = "Sections", id = UrlParameter.Optional, prodno = UrlParameter.Optional, instid = UrlParameter.Optional, section = UrlParameter.Optional } // Parameter defaults 
    ); 

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

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

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

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

} 

......但真的,你不需要很多這些路線。

+0

哦。真?你認爲我應該有多少或者真的需要多少? – dotnetN00b 2012-07-17 20:39:33

+0

那麼,目錄和MainProducts將會使用默認路徑正確處理,Sections和SectionsData可以合併爲一個路徑。 – 2012-07-17 20:46:15

+0

但是,如果我讓默認路由(就像)處理它,那麼prodno不會以查詢字符串結束? – dotnetN00b 2012-07-17 20:48:27

1

因爲SectionsData和Sections Route都具有所有其他參數可選,它們將在默認路由之前匹配。

相關問題