您好我已注册路线如下: -
routes.MapLocalizedRoute("Category",
"{SeName}-c{categoryId}",
new { controller = "Catalog", action = "Category", SeName = UrlParameter.Optional },
new { categoryId = @"\d+", SeName = @"([-\w+]+(/[-\w+]+)*)+" },
new[] { "Nop.Web.Controllers" });
routes.MapLocalizedRoute("CategoryWithManufacture",
"{SeName}-d{categoryId}/{ManufactureName}/{Color}",
new { controller = "Catalog", action = "Category", SeName = UrlParameter.Optional, Color = UrlParameter.Optional },
new { categoryId = @"\d+", SeName = @"([-\w+]+(/[-\w+]+)*)+", ManufactureName = @"([-\w+]+(/[-\w+]+)*)+", Color = @"([-\w+]+(/[-\w+]+)*)+" },
new[] { "Nop.Web.Controllers" });
我们生成以下内容: -
href="@Url.RouteUrl("CategoryWithManufacture", new { categoryId = currentCategoryId, SeName = seName, ManufactureName = manufacturerFilterItem.Name, Color = color })"
href="@Url.RouteUrl("Category", new { categoryId = currentCategoryId, SeName = seName})"
有一种方法可以直接将值分配给第二个参数“Color”而不为“ManufactureName”赋值。意思是: - (使用CategoryWithManufacture Route)
/gloves-d18/red (second parameter)
/gloves-d18/hp/red (first and second both)
我尝试过制造名称&颜色都是可选的,但是当我们为第一个参数赋值而不是第二个参数时,它可以工作但是我们不先将值赋给第二个参数,然后它就不起作用了。
请建议我使用可用的链接或示例代码。
答案 0 :(得分:1)
路由定义中只有最后一个参数是可选的。鉴于以下网址/gloves-d18/red
,路由引擎无法知道red
此处指的是{Color}
而不是{ManufactureName}
。唯一能使这项工作的是为这两部分写一些约束。现在他们都有完全相同的正则表达式约束。