如何在 HtmlHelper.Action(string, string, object) 中指定要为哪个控制器调用的命名空间?
Posted
技术标签:
【中文标题】如何在 HtmlHelper.Action(string, string, object) 中指定要为哪个控制器调用的命名空间?【英文标题】:How can I specify the namespace for which controller to call in HtmlHelper.Action(string, string, object)? 【发布时间】:2013-11-25 00:17:25 【问题描述】:我有两个名称相同的控制器,其中一个位于“管理”区域,一个位于默认区域(我相信它会解析为区域的空字符串)。
以下调用:
htmlHelper.Action("Action", "DuplicateController", new parameterValue = "test" );
似乎无法解决我的ProjectA.Controllers.DuplicateController
和ProjectB.Controllers.DuplicateController
之间的差异,即使我通过如下添加区域将其指定为“”:
HtmlHelper.Action("Action", "DuplicateController", new parameterValue = "test", area = "" );
我知道我应该能够通过在应用程序启动时注册它们时指定一个路由来解决这个问题,但是是否可以直接向控制器指定一个完全限定的命名空间,我知道我需要在操作方法中正确调用?
例如像下面这样可以解决我的问题:
HtmlHelper.Action("Action", "ProjectB.Controllers.DuplicateController", new parameterValue = "test" );
【问题讨论】:
【参考方案1】:就像你建议的那样,我相信你必须为 RouteConfig.cs 文件和 AdminAreaRegistration.cs 中的两个模糊控制器的路由添加命名空间文件。示例见this *** post。
因此,您可以将“namespaces”参数添加到上述帖子中的默认路由,或者为每个“重复”控制器创建一个路由。
在您的 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"
);
【讨论】:
谢谢,这就是我最终做的。我想在辅助方法中不允许命名空间参数的原因是路由应该负责到控制器操作的所有映射,我原则上同意这一点,但在这种情况下不太方便。以上是关于如何在 HtmlHelper.Action(string, string, object) 中指定要为哪个控制器调用的命名空间?的主要内容,如果未能解决你的问题,请参考以下文章
如何Str::shouldReceive? (嘲笑 Illuminate\Support\Str)
如何在 r (str_) 中用 alnum 否定任何字母数字字符