c# - 如何在 HtmlHelper.Action(string, string, object) 中指定调用哪个 Controller 的 namespace ?

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

我有两个名称相同的 Controller ,其中一个位于“管理”区域,另一个位于默认区域(我认为它解析为区域的空字符串)。

下面的调用:

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

似乎无法解决我的 ProjectA.Controllers.DuplicateControllerProjectB.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/

相关文章:

C# 构造函数重载(使用此关键字)

c# - 如何从 UWP(又名 .NET Core)中的类型对象获取程序集

asp.net-mvc - 在 ASP.NET MVC 中查看计数器

ruby-on-rails - rails 3路线: Default format and also limited formats

c# - 将麦克风设置切换到硬件处理

c# - 获取 ObjectListView 中的下一个/上一个项目

c# - 你如何使用 MVC/Razor 封装 logic/html

javascript - ASP.NET MVC Ajax 提交带有 AntiforgeryToken 的表单和带有验证的序列化表单数据

ruby-on-rails - 如何创建删除链接

javascript - Express Routes - 多个文件的问题