我有两个名字相同的控制器,其中一个位于“Admin”区域,另一个位于默认区域(我相信它会解析为区域的空字符串)。
以下电话:
HtmlHelper.Action("Action", "DuplicateController", new { parameterValue = "test" } );
似乎无法解决ProjectA.Controllers.DuplicateController
和ProjectB.Controllers.DuplicateController
之间的差异,即使我通过添加区域将其指定为“”,如下所示:
HtmlHelper.Action("Action", "DuplicateController", new { parameterValue = "test", area = "" } );
我知道我应该能够通过在应用程序启动时注册路由来解决这个问题,但是可以直接向控制器指定一个完全限定的命名空间我知道我需要在操作方法中调用它?
e.g。类似下面的内容可以解决我的问题:
HtmlHelper.Action("Action", "ProjectB.Controllers.DuplicateController", new { parameterValue = "test" } );
答案 0 :(得分:4)
与您的建议一样,我相信您必须在 RouteConfig.cs 文件和 AdminAreaRegistration.cs 中为两个不明确的控制器添加名称空间。文件。有关示例,请参阅this StackOverflow post。
因此,您可以将“名称空间”参数添加到默认路由中,如上文所述,或者为每个“复制”控制器创建路径。
在 RouteConfig.cs :
中routes.MapRoute(
name: "Duplicate",
url: "Duplicate/{action}/{id}",
defaults: new { controller = "Duplicate", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MyMvcApplication.Controllers" }
);
在 AdminAreaRegistration.cs :
中context.MapRoute(
"Admin_Duplicate",
"Admin/Duplicate/{action}/{id}",
new { controller = "Duplicate", action = "Index", id = UrlParameter.Optional },
new[] { "MyMvcApplication.Areas.Admin.Controllers" }
);