【问题标题】:ASP.net MVC seperate solutions with same controller name (different namespace)ASP.net MVC 具有相同控制器名称(不同命名空间)的单独解决方案
【发布时间】:2016-01-25 14:45:54
【问题描述】:

当我在不同的项目中使用相同的控制器名称时,我遇到了一些问题。 我的主要解决方案是 Web 表单,并且我有两个 MVC 单独的项目(单独的文件夹),问题如果我在第一个项目中有一个控制器,名称为 HomePage 和解决方案 2 中的相同控制器名称,我有一个错误: 找到了多种与名为“主页”的控制器匹配的类型。如果为该请求提供服务的路由 ('{*pathInfo}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用带有“namespaces”参数的“MapRoute”方法的重载来注册此路由。

对“主页”的请求找到了以下匹配的控制器: Project1.Controllers.HomePageController Project2.Controllers.HomePageController

global.asa 在我添加了两个路线图的网络表单解决方案中,但我仍然有同样的错误。 有什么办法可以解决这个问题吗? 我可以在视图中使用命名空间的操作吗 @Html.Action("index", "HomePage") 谢谢

【问题讨论】:

  • 您是如何注册路线的?向我们展示一些代码,以便我们为您提供帮助,谢谢。
  • 其中一个 MVC 项目是否引用另一个?路由框架只是从所有可用的命名空间中收集 all 控制器,然后尝试找到匹配的路由。因此,如果一个项目引用另一个项目,是否是不同的项目并不重要。
  • 是的,我试过了,但它只走第一条路线,第二条路线有同样的错误
  • 两个 MVC 项目之间没有引用,project1 有类似 www.project1.com 的 url,第二个是 www.project2.com,当我添加路由时它只适用于第一个

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

如果您需要在注册路由时设置命名空间值,您应该这样做:

routes.MapRoute(
        name: "RouteName",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
        namespaces: new string[] { "MyNamespace.Controllers" });

通过指定命名空间,它消除了歧义。

【讨论】:

  • 我尝试为两者添加命名空间,但问题是应用程序始终采用第一条路线
  • 您能否编辑您的原始帖子并包含 RegisterRoutes 代码,以便我们查看可能存在冲突的位置?
  • 我修好了,解决办法是:第二个项目应该有一个区域,第一个是可选的
猜你喜欢
  • 1970-01-01
  • 2015-03-12
  • 2020-02-15
  • 1970-01-01
  • 2014-12-13
  • 2017-10-16
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多