所以我刚开始使用我的第一个大型MVC应用程序并且让我头疼。
所有/Category/Subcategory
都转到ProductController.Index(string category, string subcategory)
。如果我没有指定子类别,它将显示类别中的所有项目(福特,奥迪等)
如果我有这样的路线,则网址/Home/About
会转到Product/Index
,参数为:Category=Home, Subcategory=About
。
如果我将默认设置移到顶部,则网址/Car/Ford
不会去任何地方,因为我没有CarController
(我不想为每个类别设置控制器。)
我真的不喜欢/ store / Car / Ford ..
我是否需要为每个“主”类别创建一个路由并对该名称进行硬编码? 帮我解决这个问题!
// http://localhost/Car/Ford (note: Car can be replaced by bike, plan, boat etc.)
routes.MapRoute(
name: "AllProductsInCategoryOrSubcategory",
url: "{category}/{subcategory}",
defaults: new { controller = "Products", action = "Index", subcategory = UrlParameter.Optional }
);
// http://localhost/Car/Ford/ABC123/Explorer
// http://localhost/Car/Ford/ABC123
routes.MapRoute(
name: "Kakel",
url: "{category}/{subcategory}/{id}/{productName}",
defaults: new { controller = "Products", action = "Details", productName = UrlParameter.Optional }
);
// http://localhost/Home/About
// http://localhost/Products/RenderImage/ABC123 (used to render image in details view)
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 0 :(得分:0)
您可以使用路径约束来解决此问题。假设你的第一条路线 AllProductsInCategoryOrSubcategory 你可以添加这样的约束。我在这里使用你只有一个类别,这是汽车。
routes.MapRoute(
name: "AllProductsInCategoryOrSubcategory",
url: "{category}/{subcategory}",
defaults: new { controller = "Products", action = "Index",
subcategory = UrlParameter.Optional },
new {category = "^car$"}
);
由于此路线限制,当类别名称为 car 时,MVC将选择此路线。 一个重点是您需要在路径约束之前添加默认值。因为在选择路线时MVC将首先选择默认值,然后将应用约束。