Asp.net mvc 当您将Index指定为操作时,@Url.Action为什么不输出Index?

Asp.net mvc 当您将Index指定为操作时,@Url.Action为什么不输出Index?,asp.net-mvc,routing,Asp.net Mvc,Routing,当您将Index指定为操作时,@Url.Action为什么不输出Index 我试图使用razor@URL.Action(“Index”,“Admin”)输出一个URL,但是输出是错误的。结果是路由认为/Admin是一个类别,并被错误的路由捕获 我使用的路线是 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"

当您将Index指定为操作时,@Url.Action为什么不输出Index

我试图使用razor@URL.Action(“Index”,“Admin”)输出一个URL,但是输出是错误的。结果是路由认为/Admin是一个类别,并被错误的路由捕获

我使用的路线是

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


        routes.MapRoute(
            null,
            "Page{page}",
            new { Controller = "Photo", action="List" , category = (string)null },
            new { page = @"\d+" }
        );


        routes.MapRoute(
            null,
            "{category}",
            new { Controller = "Photo", action = "List", page=1 }
        );


        routes.MapRoute(
            null,
            "{category}/Page{page}",
            new { Controller = "Photo", action = "List"},
            new { page = @"\d+" }
        );


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

        routes.MapRoute(null, "{controller}/{action}");
    }

我通过添加两条新路线解决了这个问题

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


        routes.MapRoute(
            "AdminIndex",                                           // Route name
            "Admin",                            // URL with parameters
            new { controller = "Admin", action = "Index" }  // Parameter defaults
        );
        routes.MapRoute(
            "Admin",                                           // Route name
            "Admin/Page{page}",                            // URL with parameters
            new { controller = "Admin", action = "Index" }  // Parameter defaults
        );


        routes.MapRoute(
            null,
            "Page{page}",
            new { Controller = "Photo", action="List" , category = (string)null },
            new { page = @"\d+" }
        );

        routes.MapRoute(
            null,
            "{category}",
            new { Controller = "Photo", action = "List", page=1 }
        );


        routes.MapRoute(
            null,
            "{category}/Page{page}",
            new { Controller = "Photo", action = "List"},
            new { page = @"\d+" }
        );


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

        routes.MapRoute(null, "{controller}/{action}");
    }

我通过添加两条新路线解决了这个问题

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


        routes.MapRoute(
            "AdminIndex",                                           // Route name
            "Admin",                            // URL with parameters
            new { controller = "Admin", action = "Index" }  // Parameter defaults
        );
        routes.MapRoute(
            "Admin",                                           // Route name
            "Admin/Page{page}",                            // URL with parameters
            new { controller = "Admin", action = "Index" }  // Parameter defaults
        );


        routes.MapRoute(
            null,
            "Page{page}",
            new { Controller = "Photo", action="List" , category = (string)null },
            new { page = @"\d+" }
        );

        routes.MapRoute(
            null,
            "{category}",
            new { Controller = "Photo", action = "List", page=1 }
        );


        routes.MapRoute(
            null,
            "{category}/Page{page}",
            new { Controller = "Photo", action = "List"},
            new { page = @"\d+" }
        );


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

        routes.MapRoute(null, "{controller}/{action}");
    }

这是因为您的默认路线

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "App", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
当创建
操作url
时,它将看到您的
默认路径,因此您的路径将是
Admin/{action}
,因为您的操作与
default
操作相同,所以它将忽略在url中写入它,并且如果您仍然希望显示
索引
则将路由顺序更改为

routes.MapRoute(null, "{controller}/{action}");


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

这是因为您的默认路线

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "App", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
当创建
操作url
时,它将看到您的
默认路径,因此您的路径将是
Admin/{action}
,因为您的操作与
default
操作相同,所以它将忽略在url中写入它,并且如果您仍然希望显示
索引
则将路由顺序更改为

routes.MapRoute(null, "{controller}/{action}");


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