【问题标题】:ASP.Net MVC 4 - Multiple types were found that match the controller named 'Home'.ASP.Net MVC 4 - 找到与名为“Home”的控制器匹配的多种类型。
【发布时间】:2012-02-24 01:20:22
【问题描述】:

刚刚创建了一个新的 MVC 4 项目并从 MVC 3 项目中复制了一些区域。我已经仔细检查了我所有的 web.configs 和 arearegistration.cs。我的配置都指向正确版本的 razor 和 MVC 以及我的路由。MapRoute 签名包括正确的命名空间参数,我还检查并确保我的 IIS 池没有托管多个 MVC 应用程序。

我的 Global.asax 文件...

routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
            new string[] { "MVCProject.Web.Controllers" }
        );

我的区域注册文件...

context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new string[] { "MVCProject.Web.Areas.Admin.Controllers" }
        );

和...

context.MapRoute(
            "Terminator_default",
            "Terminator/{controller}/{action}/{id}",
            new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            new string[] { "MVCProject.Web.Areas.Terminator.Controllers" }
        );

我已经检查了我所知道的一切以检查以解决此问题 , 正确的 dll 区域也已加载...

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-areas asp.net-mvc-4


【解决方案1】:

好的,我知道发生了什么。我会回答我自己的问题,希望对其他人有所帮助。

通常,当您在 VS 2010 中创建一个新的 MVC 项目时,您会得到模板为您提供的名称空间和一个或两个已存根的主控制器。我喜欢将我的 MVC 应用程序分解为通常的层(数据、模型和服务),每一层都在它自己的项目中。然后我重命名我的 Web 项目以将 .web 附加到项目名称和命名空间“MyWebProject.Web”。

该模板在我重命名 Web 项目并为我创建了一个家庭控制器之前创建了应用程序。模板创建的主控制器位于 MyWebProject.Controllers 命名空间中,我的 routes.MapRoutes() 使用 MyWebProject.Web.Controllers 作为参数。

一旦我将模板创建的存根控制器移到 MyWebProject.Web.Controllers 命名空间中,它就解决了问题。

【讨论】:

    【解决方案2】:

    此问题的另一个可能原因如下:

    multiple-types-were-found-that-match-the-controller-named-home

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      相关资源
      最近更新 更多