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

Chi*_*Kun 1 asp.net-mvc routes

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

我试图使用 razor @Url.Action("Index", "Admin") 输出 URL,但输出是http://localhost/Admin。结果是路由认为/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}");
    }
Run Code Online (Sandbox Code Playgroud)

Usm*_*man 6

这是因为你的默认路由

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

action url创建时,它会看到您的default路线,因此您的路线将是,Admin/{action}因为您的操作与操作相同default,因此它将忽略在 url 中写入它,如果您仍然想显示,请将index路线的顺序更改为

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
        );
Run Code Online (Sandbox Code Playgroud)