.NET MVC 4路由映射和Html.Action

时间:2013-12-04 05:56:54

标签: asp.net-mvc asp.net-mvc-4 routes

当我有像

这样的路线图配置时,我遇到了这样的问题
routes.MapRoute(
            name: "Merchandise",
            url: "Merchandise/{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

我从@ Html.Action获取了“hxxp://site.com/Merchandise/Controller/Action/1”(“操作”,“控制器”,新{Id =“1”})其中“hxxp:/ /site.com/Controller/Action/1“是预期的。

如果路线图配置为

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
routes.MapRoute(
            name: "Merchandise",
            url: "Merchandise/{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

然后当我尝试使用商品不是控制器的“hxxp://site.com/Merchandise/Controller”时,我得到404(“hxxp://site.com/Merchandise/Controller/Action/1”是好的BTW)。我怎样才能解决这个矛盾呢?我想要的是,“商品”在这里扮演的是角色,但不是控制者。

1 个答案:

答案 0 :(得分:2)

您案例中的商品可称为区域。引用ASP.NET MVC中的区域 根据路由设计,如果您有任何应在默认路由之前定义的自定义路由。因为这是将URL解码为路由的顺序。因此,在第一种情况下,您在默认路由之前定义了自定义路由,因此它可以正常工作,而在第二种情况下,首先定义默认路由。