html.routelink 不去指定路由

Irf*_*nif 5 asp.net-mvc routing asp.net-mvc-routing

我有一堆路由定义为:

routes.MapRoute(
                name: "ID",
                url: "{category}/{subcategory}/{lowercategory}/{lowercategory1}/{id}/{ignore}",
                defaults: new { controller = "Home", action = "Index", ignore = UrlParameter.Optional }
            );

            routes.MapRoute(
                name: "LowerCategory1",
                url: "{category}/{subcategory}/{lowercategory}/{lowercategory1}",
                defaults: new { controller = "Home", action = "Index" }
            );

            routes.MapRoute(
                name: "LowerCategory",
                url: "{category}/{subcategory}/{lowercategory}",
                defaults: new { controller = "Home", action = "Index" }
            );

            routes.MapRoute(
                name: "Subcategory",
                url: "{category}/{subcategory}",
                defaults: new { controller = "Home", action = "Index" }
            );

            routes.MapRoute(
                name: "Category",
                url: "{category}",
                defaults: new { controller = "Home", action = "Index" }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
Run Code Online (Sandbox Code Playgroud)

现在我使用 routeLink 来访问默认路由,但它不起作用。

@Html.RouteLink("Create Ad", "Default", new { controller="Electronics",action="Details" })
Run Code Online (Sandbox Code Playgroud)

请求转到主控制器索引功能。我做错了什么。如何使用 routeLink 以便请求应该转到默认路由。

小智 2

我也有这个问题。看来代码调用了带签名的 RouteLink 重载

RouteLink(string linkText, object routeValues, object htmlAttributes)
Run Code Online (Sandbox Code Playgroud)

这意味着永远不会使用此重载设置routeName,并且很可能您会得到一个带有空href属性的锚元素或使用默认控制器和操作生成的链接,因为routeValues也没有设置为您期望的值。

我们实际上想调用这个重载

RouteLink(string linkText, string routeName, object routeValues)
Run Code Online (Sandbox Code Playgroud)

这可以通过使用命名参数来确保,如下所示:

@Html.RouteLink("Create Ad", routeName: "Default", routeValues: new { controller="Electronics",action="Details" })
Run Code Online (Sandbox Code Playgroud)