ASP.NET MVC 3.0 URL路由问题

时间:2012-01-26 03:55:34

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 razor

您好我已注册路线如下: -

 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)

我尝试过制造名称&颜色都是可选的,但是当我们为第一个参数赋值而不是第二个参数时,它可以工作但是我们不先将值赋给第二个参数,然后它就不起作用了。

请建议我使用可用的链接或示例代码。

1 个答案:

答案 0 :(得分:1)

路由定义中只有最后一个参数是可选的。鉴于以下网址/gloves-d18/red,路由引擎无法知道red此处指的是{Color}而不是{ManufactureName}。唯一能使这项工作的是为这两部分写一些约束。现在他们都有完全相同的正则表达式约束。