我一直试图让一些自定义路线无法运气。我的汽车应用程序有两页。第一页显示了车辆清单。当用户单击此页面上生成的链接时,它会将它们带到产品列表页面。问题是此页面无法正确生成链接。
这是路线:
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)
这让我发疯了。
答案 0 :(得分:2)
ASP.NET MVC仅支持单个可选参数。更新您的路线,为make和model提供默认值,而不是将它们设为可选。您可能还需要使用RouteLink
上的重载来获取路由名称,以便选择正确的路由。
@Html.RouteLink(model, "Products", new
{
id = Model.CategoryName,
make = Model.CurrentMake,
model = model
})
答案 1 :(得分:0)
您的代码应该有效。我用一个新项目测试了你的路线,这就是我得到的。你的路线配置还有其他什么吗?
http://localhost:60599/Products/horns/dodge/dakota
我正在使用asp.net MVC 3
答案 2 :(得分:0)
好吧,我弄明白了这个问题。您可以拥有多个UrlParameter.Optional,但存在问题。这是一个错误或功能,取决于微软想要如何定位它。
问题是make是空的,在构建URL时导致了问题。您可以在此处找到更多信息:
感谢您的所有建议和帮助。