我有两个名称相同的 Controller ,其中一个位于“管理”区域,另一个位于默认区域(我认为它解析为区域的空字符串)。
下面的调用:
HtmlHelper.Action("Action", "DuplicateController", new { parameterValue = "test" } );
似乎无法解决我的 ProjectA.Controllers.DuplicateController
和 ProjectB.Controllers.DuplicateController
之间的差异,即使我将区域指定为“"按如下方式添加:
HtmlHelper.Action("Action", "DuplicateController", new { parameterValue = "test", area = "" } );
我知道我应该能够通过在应用程序启动时注册它们时指定路由来解决这个问题,但是是否可以直接为 Controller 指定一个完全限定的命名空间我知道我需要在操作方法中正确调用?
例如像下面这样的东西可以解决我的问题:
HtmlHelper.Action("Action", "ProjectB.Controllers.DuplicateController", new { parameterValue = "test" } );
最佳答案
正如您所建议的,我相信您必须在 RouteConfig.cs 文件和 AdminAreaRegistration.cs 中为两个不明确的 Controller 的路由添加 namespace 文件。有关示例,请参阅 this StackOverflow post .
因此,您可以将“命名空间”参数添加到上面帖子中的默认路由,或者为每个“重复” Controller 创建一个路由。
在您的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" }
);
关于c# - 如何在 HtmlHelper.Action(string, string, object) 中指定调用哪个 Controller 的 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20182867/