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

时间:2017-04-09 16:32:13

标签: asp.net-mvc routing

为什么在指定索引作为操作时@ Url.Action不输出索引?

我正在尝试使用razor @ Url.Action(“Index”,“Admin”)输出网址,但输出为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}");
    }

2 个答案:

答案 0 :(得分:3)

这是因为您的默认路线

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

创建action url后,它会看到您的default路由,因此您的路由将为Admin/{action},因为您的操作与default操作相同,因此会忽略将其写入网址,如果您仍希望显示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
        );

答案 1 :(得分:0)

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

<div>
<button id="calculate" onclick="link_events(); return false;"></button>
</div>