Asp.net mvc 为什么编译时MVC在错误的控制器上启动?

Asp.net mvc 为什么编译时MVC在错误的控制器上启动?,asp.net-mvc,asp.net-mvc-3,visual-studio-2010,Asp.net Mvc,Asp.net Mvc 3,Visual Studio 2010,我有一个名为HomeController的控制器、一个名为Home的文件夹和一个名为Index的视图。我还有另一个名为TestEditController的控制器、一个名为TestEdit的文件夹和一个名为Index的视图。出于某种原因,当我编译它时,URL:http://localhost:4097/不指向Home/Index,而是指向TestEdit/Index。我进入属性>开始操作>特定页面。。。并将文本框留空。注意:放置/不起作用。我已经清理、构建、重建了项目/解决方案。但还是有同样的问

我有一个名为HomeController的控制器、一个名为Home的文件夹和一个名为Index的视图。我还有另一个名为TestEditController的控制器、一个名为TestEdit的文件夹和一个名为Index的视图。出于某种原因,当我编译它时,URL:
http://localhost:4097/
不指向Home/Index,而是指向TestEdit/Index。我进入属性>开始操作>特定页面。。。并将文本框留空。注意:放置
/
不起作用。我已经清理、构建、重建了项目/解决方案。但还是有同样的问题。以下是我的Global.asax文件:

    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
        );

    }

因为SectionsData和Sections Route都有所有其他参数可选,所以它们将在默认路由之前匹配。

因为SectionsData和Sections Route都有所有其他参数可选,所以它们将在默认路由之前匹配。

您的匹配太一般了。请尝试以下方法:

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
    );

}

…但实际上,您不需要太多这些路线。

您的匹配太普通了。请尝试以下方法:

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
    );

}

…但实际上,您不需要太多这些路线。

这些路线将进行第一场比赛。由于TestEdit路由的所有URL参数都是可选的,因此它首先匹配该参数。路由将采用第一个匹配。由于TestEdit路由的所有URL参数都是可选的,因此它首先匹配。真正地你认为我应该有或真的需要多少?好吧,目录和主要产品将通过默认路线得到正确处理,区段和区段数据可以合并到一个路线中。但是如果我让默认路线(按原样)处理,prodno不会最终成为一个查询字符串吗?哇!是的,我错过了。但是你可以通过在默认路径中引用它来解决这个问题。真正地你认为我应该有或真的需要多少?好吧,目录和主要产品将通过默认路线得到正确处理,区段和区段数据可以合并到一个路线中。但是如果我让默认路线(按原样)处理,prodno不会最终成为一个查询字符串吗?哇!是的,我错过了。但您可以通过在默认路径中引用它来修复此问题。