2013-02-28 74 views
0

我有一个asp.net MVC项目asp.net的MVC路由规则

//Products/Category/SubCategory/Page 
routes.MapRoute(
    "ProductCategoryTypePaging", 
    "Products/{Category}/{subCategory}/Page{page}", 
    new { controller = "Products", action = "Index" }, new { page = @"\d+" } 
); 

//Products/Category/Page 
routes.MapRoute(
    "ProductCategoryPaging", 
    "Products/{Category}/Page{page}", 
    new { controller = "Products", action = "Index" }, new { page = @"\d+" } 
); 

//Products/Category/SubCategory 
routes.MapRoute(
    "ProductCategoryType", 
    "Products/{Category}/{subCategory}", 
    new { controller = "Products", action = "Index", page = 1 } 
); 

//Products/Category 
routes.MapRoute(
    "ProductCategory", 
    "Products/{Category}", 
    new { controller = "Products", action = "Index" } 
); 


routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

这些定义以下途径似乎工作正常,但如果我尝试和查看产品细节,它打破。要查看详情,网址是这样的:

/产品/详细信息/ 18

运行的产品/类别/子类别路线上匹配

什么我需要做的不同,以使这项工作?

回答

0

有许多方法可以做到这一点:

  1. 更改路线的静态部分是不同的,如改变产品/类别/子类别的路线有以下模板(或一些类似的独特的):“ProductCategory/{Category}/{subCategory}”
  2. 向仅允许有效类别的同一路由添加约束,并允许不属于类别的内容通过。

根本问题是这个应用程序中的路线结构是不明确的。如果有一个名为“Details”的类别有一个名为“18”的子类,那么您会发生什么?它应该映射哪条路线?

在上面列出的选项#2中,您可以添加到类别/子类别路线的约束将是例如不允许类别名称为“详细信息”的RegEx约束。这会导致路由被跳过,但也会阻止应用程序拥有一个名为“Details”的类别。如果这没关系,它应该可以正常工作。

+0

谢谢你。我在上面的选项1中添加了一个新的路线,该路线位于category /子类别路线之前:routes.MapRoute(“ProductDetail”,“Products/Details/{id}”,new {controller =“Products”,action =“Details” },new {id = @“\ d +”}); – Temple 2013-02-28 23:20:00