我在这样一个问题中挣扎,当我有一个路由映射配置时

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("Action","Controller", new { Id = "1"}) 那里得到了“hxxp://site.com/Merchandise/Controller/Action/1”,其中“hxxp://site.Action”。 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”这样的 URL 时得到 404,而 Merchandise 不是 Controller (“hxxp://site.com/Merchandise/Controller/Action/1”是好的顺便说一句) .我该如何解决这个矛盾?我想要的是这里的“商品”充当类别的角色,而不是 Controller 。

最佳答案

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

关于asp.net-mvc - .NET MVC 4 路线图和 Html.Action,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20368037/

10-17 00:29