我想创建一个以下列方式动态映射路线的网站:
http://domain/MyCategory1
http://domain/
http://domain/MyCategory1/MySubCategory
到目前为止,我已经添加了一条到Global.asax的新路线
routes.MapRoute(
"IFAMainCategory", // Route name
"{IFACategoryName}", // URL with parameters
new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults
);
但是这会混淆标准的默认路线。
有什么方法可以控制它吗?
答案 0 :(得分:2)
您需要更改路线:
routes.MapRoute("MyCustomRoute", "MyCategory1/{action}/{id}",
new { controller = "MyCategory1", action = "MySubCategory", id = UrlParameter.Optional });
// Then the default route
基本上,由于你刚刚制作了一个巨型路线捕手,所有路线都与那个路线相匹配。如果要将特定路径映射到控制器,则需要具体。
答案 1 :(得分:0)
您需要在路线名称中包含MyCategory1
routes.MapRoute( "IFAMainCategory",
// Route name "MyCategory1/{IFACategoryName}",
// URL with parameters new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults );
查看此其他帖子,例如,查看Route Debugger
答案 2 :(得分:0)
不幸的是,我不认为你会直接实现你想要的目标。
您需要一些方法来分隔路线,例如将“类别”放在文件夹中:
routes.MapRoute(
"IFAMainCategory", // Route name
"categories/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "GetSubCategories", IFACategoryName=1 }
);
另一个选项是您可以在App Start上的默认路由之前为每个父类别注册路由:
routes.MapRoute(
"IFAMainCategory 1", // Route name
"MyCategory1/{subcategory}", // URL with parameters
new { controller = "Home", action = "GetSubCategories", IFACategoryName=1, subcategory = UrlParameter.Optional }
);
routes.MapRoute(
"IFAMainCategory 2", // Route name
"MyCategory2/{subcategory}", // URL with parameters
new { controller = "Home", action = "GetSubCategories", IFACategoryName=2, subcategory = UrlParameter.Optional }
);