HTML的路由链接没有跳转到指定的路由。

5

我有一堆已定义的路由:

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

现在我使用routeLink来访问默认路由,但它不起作用。
@Html.RouteLink("Create Ad", "Default", new { controller="Electronics",action="Details" })

请求发送到主页控制器的索引函数。我做错了什么?如何使用routeLink,使请求应该转到默认路由。

1个回答

2
我也遇到了这个问题。 看起来代码调用了带有以下签名的RouteLink重载:
RouteLink(string linkText, object routeValues, object htmlAttributes)

这意味着使用这种重载时,routeName 没有被设置,很可能你会得到一个 href 属性为空的锚点元素或者默认控制器和操作生成的链接,因为 routeValues 也没有按照你的期望进行设置。

我们实际上想要调用的是这个重载:

RouteLink(string linkText, string routeName, object routeValues)

可以通过使用命名参数来确保,例如:
@Html.RouteLink("Create Ad", routeName: "Default", routeValues: new { controller="Electronics",action="Details" })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接