【问题标题】:ASP.NET MVC4 - Different routing for 2 controllers with actionLinksASP.NET MVC4 - 带有 actionLinks 的 2 个控制器的不同路由
【发布时间】:2015-02-12 11:25:27
【问题描述】:

好的,我有两个控制器:
HomeController
MathController

我希望 HomeController 的路由保持默认:{controller}/{action}/{id}。但我想使用http://myurl/Task/Math/{action} 访问 MathController 中的操作。

所以我所做的就是像这样编写我的 RouteConfig:

    routes.MapRoute(
        name: "Math",
        url: "Task/{controller}/{action}",
        defaults: new { controller = "Math", action = "Index" }
    );  

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

当使用上述配置并在浏览器中手动输入 URL 时,两种路由方法都可以正常工作。尽管在尝试添加“actionLink”时它总是使用Task/{Controller}/{Action} 路由。即使我像这样为 Home 控制器创建链接:@Html.ActionLink("Hem", "Hem", "Home", null, new { @class = "navbar-brand" })

如何配置我的路由或操作链接以获得首选功能?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing actionlink html.actionlink


    【解决方案1】:

    路由在RouteConfig.cs 中自上而下匹配。您的问题是两个路由配置都是“捕获所有”路由,这意味着它们都适用于任何控制器/操作。当您使用@Html.ActionLink 时,MVC 将根据它找到的第一个路由呈现 url,该路由与您的“任务”路径匹配。有几种方法可以改变它以获得你想要的东西。

    如果您只想为数学控制器使用“任务”路径,那么我会将您的路线更改为:

    routes.MapRoute(
        name: "Math",
        url: "Task/Math/{action}",
        defaults: new { controller = "Math", action = "Index" }
    );
    

    如果你想为“任务”路径使用多个控制器,那么你可以添加一个路由约束。您可以像下面这样使用它并指定控制器列表(正则表达式),或者您可以创建自己的自定义 Route Constraint 类并实现您想要的任何功能。

    routes.MapRoute(
        name: "Math",
        url: "Task/{controller}/{action}",
        defaults: new { controller = "Math", action = "Index" },
        constraints: new { controller = "Math|OtherController" }
    );
    

    或者如果你想保持所有控制器/动作都匹配两个 url,那么你必须翻转你的路由以首先显示默认路由,或者你可以像这样使用@Html.RouteLink

    @Html.RouteLink("Hem", "Default", new { controller = "Home", action = "Hem" }, new { @class = "navbar-brand" })
    

    【讨论】:

    • 谢谢,很好的回答!我需要知道的一切!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多