1

我一直试图让几个自定义路线没有运气。我的汽车应用程序有两个页面。第一页显示车辆列表。当用户单击此页面上生成的链接时,会将它们带到产品列表页面。问题是此页面无法正确生成链接。

以下是路线:

            routes.MapRoute(
                "Select_Vehicle",
                "Select_Vehicle/{id}/{make}",
                new { controller = "Select_Vehicle", action = "Index", id = UrlParameter.Optional, make = UrlParameter.Optional });

            routes.MapRoute(
                "Products",
                "Products/{id}/{make}/{model}",
                new { controller = "Products", action = "Index", id = UrlParameter.Optional, make = UrlParameter.Optional, model = UrlParameter.Optional });

            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional });

Select_Vehicle 页面应生成如下链接:

/products/horns/dodge/dakota

但我得到的是:

/Products/Index/horns?make=dodge&model=Dakota

它只是无法正常工作。另外,我不明白为什么“索引”也会显示,因为它是默认设置。

我已经尝试过 ActionLink 和 RouteLink:

@Html.RouteLink(model, new { Controller = "Products", id = Model.CategoryName, make = Model.CurrentMake, model = model })
@Html.ActionLink(model, "Index", "Products", new { id = Model.CategoryName, make = Model.CurrentMake, model = model }, null)

这真让我抓狂。

4

3 回答 3

2

ASP.NET MVC 仅支持单个可选参数。更新您的路线以给 make 和 model 一个默认值,而不是让它们成为可选的。您可能还需要使用RouteLink采用路由名称的重载,以便它选择正确的路由。

@Html.RouteLink(model, "Products", new 
 {
     id = Model.CategoryName,
     make = Model.CurrentMake,
     model = model
 })
于 2012-12-10T01:09:03.847 回答
0

您的代码应该可以工作。我用一个新项目测试了你的路线,这就是我得到的。您的路线配置中还有其他内容吗?

http://localhost:60599/Products/horns/dodge/dakota

我正在使用 asp.net MVC 3

于 2012-12-10T11:08:50.190 回答
0

好吧,我发现了问题所在。您可以拥有多个 UrlParameter.Optional,但存在一个问题。这是一个错误或功能,具体取决于 Microsoft 想要如何定位它。

问题是 make 是空的,这在构建 URL 时导致了问题。您可以在这里找到更多信息:

http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx

感谢所有的建议和帮助。

于 2012-12-13T02:18:13.450 回答