asp.net-mvc - ASP.NET MVC4 - 具有 actionLinks 的 2 个 Controller 的不同路由

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

好吧,我有这样的情况,我有两个 Controller :
家庭 Controller
数学 Controller

我希望 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 Controller 创建一个链接,如下所示: @Html.ActionLink("Hem", "Hem", "Home", null, new { @class = "navbar-brand"})

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

最佳答案

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

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

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

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

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

或者,如果您想保留与两个网址匹配的所有 Controller /操作,那么您必须翻转路线以首先显示默认路线,或者您可以像这样使用 @Html.RouteLink :

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

关于asp.net-mvc - ASP.NET MVC4 - 具有 actionLinks 的 2 个 Controller 的不同路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28476228/

相关文章:

asp.net-mvc - DbContext DbSet 中的数据与数据库不同

asp.net-mvc - 在同一页面上创建新的父级和子级

asp.net-mvc - 如何在 ASP.NET MVC 中编写指向静态文件的链接?

asp.net-mvc - 在 MVC4 中运行子域的最佳方法

asp.net-mvc-routing - 如何在MapHttpRoute中设置默认 namespace ?

javascript - 如何停止 MVC RedirectToRouteResult JavaScript?

c# - 正则表达式不匹配任何html标签

c# - 在带有 jquery ui 的 asp.net mvc 中使用选项卡

asp.net - 使用 AJAX 发布 Asp.net 表单

asp.net-mvc - MVC 4.0 使用 HttpResponse.RemoveOutputCacheItem 清除输出缓存