MVC3 URL路由

时间:2011-09-08 15:08:28

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我想创建一个以下列方式动态映射路线的网站:

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
);

但是这会混淆标准的默认路线。

有什么方法可以控制它吗?

3 个答案:

答案 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

.NET MVC custom routing

答案 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 } 
            );