如何在HtmlHelper.Action(字符串,字符串,对象)中指定要调用哪个控制器的命名空间?

时间:2013-11-25 00:17:25

标签: c# asp.net-mvc routes html-helper

我有两个名字相同的控制器,其中一个位于“Admin”区域,另一个位于默认区域(我相信它会解析为区域的空字符串)。

以下电话:

HtmlHelper.Action("Action", "DuplicateController", new { parameterValue = "test" } );

似乎无法解决ProjectA.Controllers.DuplicateControllerProjectB.Controllers.DuplicateController之间的差异,即使我通过添加区域将其指定为“”,如下所示:

HtmlHelper.Action("Action", "DuplicateController", new { parameterValue = "test", area = "" } );

我知道我应该能够通过在应用程序启动时注册路由来解决这个问题,但是可以直接向控制器指定一个完全限定的命名空间我知道我需要在操作方法中调用它?

e.g。类似下面的内容可以解决我的问题:

HtmlHelper.Action("Action", "ProjectB.Controllers.DuplicateController", new { parameterValue = "test" } );

1 个答案:

答案 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" }
);