不同名称空间中的相同控制器名称

时间:2014-12-18 17:07:02

标签: asp.net-mvc-4 routes

我将文件结构设置为:

Controllers/Requestor/RequestorHomeController (Namespace: Proj.Presentation.Controllers.Requestor)
Controllers/Approver/ApproverHomeController (Namespace: Proj.Presentation.Controllers.Approver)

我的路线如下:

routes.MapRoute(
            name: "PrependRequestor",
            url: "requestor/{controller}/{action}/{id}",
            defaults: new { controller = "RequestorHome", action = "Index", id = UrlParameter.Optional },
            namespaces: new string[] { "Proj.Presentation.Controllers.Requestor" }
        );

routes.MapRoute(
            name: "PrependApprover",
            url: "approver/{controller}/{action}/{id}",
            defaults: new { controller = "ApproverHome", action = "Index", id = UrlParameter.Optional },
            namespaces: new string[] { "Proj.Presentation.Controllers.Approver" }
        );

我没有收到任何错误,但当我转到Approver/ApproverHomeController/Index时,第一条路线被点击,因为网址为requestor/approverhome。如果它位于不同的命名空间中,那么第一个控制器是否应该被忽略?关于如何才能达到第二条路线的任何建议?

1 个答案:

答案 0 :(得分:1)

路线

Approver/ApproverHomeController/Index

不起作用,因为您必须省略网址中的“控制器”。

它可以作为

Approver/ApproverHome/Index

您还必须使用

进入第二条路线
approver

因为你有控制器和动作部分的默认值。

<强>更新

如果要从不同命名空间中的控制器进行重定向,则应使用

return RedirectToAction("index", "approverhome", new { area = "approver" } );