Asp.net mvc MVC3 URL路由
我想创建一个网站,以以下方式动态映射路线:Asp.net mvc MVC3 URL路由,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc Routing,我想创建一个网站,以以下方式动态映射路线: 到目前为止,我已经添加了一条到Global.asax的新路线 routes.MapRoute( "IFAMainCategory", // Route name "{IFACategoryName}", // URL with parameters new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults );
到目前为止,我已经添加了一条到Global.asax的新路线
routes.MapRoute(
"IFAMainCategory", // Route name
"{IFACategoryName}", // URL with parameters
new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults
);
但这会把作为标准的默认路线弄乱
有什么办法可以控制吗?您需要更改路线:
routes.MapRoute("MyCustomRoute", "MyCategory1/{action}/{id}",
new { controller = "MyCategory1", action = "MySubCategory", id = UrlParameter.Optional });
// Then the default route
基本上,由于您刚刚制作了一个巨大的路线捕捉器,所有路线都与该路线匹配。如果要将特定路线映射到控制器,则需要转到特定路线 您需要在路由名称中包含MyCategory1
routes.MapRoute( "IFAMainCategory",
// Route name "MyCategory1/{IFACategoryName}",
// URL with parameters new { controller = "Home", action = "GetSubCategories", IFACategoryName=1} // Parameter defaults );
例如,查看另一篇文章,并查看路由调试器
不幸的是,我认为你无法直接实现你想要的 您需要某种方法来分隔路线,例如将“类别”放在文件夹中:
routes.MapRoute(
"IFAMainCategory", // Route name
"categories/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "GetSubCategories", IFACategoryName=1 }
);
另一个选项是,您可以在应用程序启动时的默认路由之前为每个父类别注册路由:
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 }
);