ASP.NET MVC5,两个控制器,在不同的文件夹中具有相同的名称

时间:2016-12-16 12:49:11

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我有两个名为FilmController的文件。一个在控制器文件夹中显示我的数据库数据,一个在一个名为API的文件夹中,允许用户以json格式查看数据。

我的问题是,在我的导航栏中,我有一个动作链接项,在创建API之前链接到控制器文件夹电影文件。现在它并不是一个目标。无论如何都要针对特定​​目标。

.group {
  width: 700px;
  margin: 0 auto;
}
.block {
  width: 200px;
  display: inline-block;
  background: #333;
  margin: 5px;
  text-align: center;
  color: white;
}
.one, .two, .three, .five {
  height: 30px;
}
.four {
  height: 160px;
}

我想将它指向控制器/电影文件。

2 个答案:

答案 0 :(得分:2)

您不能使用ActionLink帮助程序来定位特定的Controller类。

但是,您可以在RouteConfig.cs中创建第二个路径定义。让这条路线指向另一个名称空间。然后将您的API代码放在此命名空间中:

routes.MapRoute(
    "API",
    "api/{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "MyMvcApp.Api" }
);

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

答案 1 :(得分:0)

对于在两个文件夹中具有相同名称的两个控制器具有类似问题的人,请考虑在ASP NET MVC项目中使用Areas,并将每个控制器放在不同的区域。然后,如果您在视图中使用@Html.ActionLink("Name", "Action", "Controller"),它将始终根据您所在的区域来选择控制器,并且如果您想从另一个区域链接到控制器,则可以使用@Html.ActionLink("Name", "Action", "Controller", new { area = "AreaName" }, null)