2012-07-17 74 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都具有所有其他参数可选,它们将在默认路由之前匹配。

相关问题