ASP.Net MVC 4 - 找到了与名为“Home”的控制器匹配的多种类型。

时间:2012-02-24 01:20:23

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

刚刚创建了一个新的MVC 4项目,并从MVC 3项目复制了一些区域。我仔细检查了所有的web.configs和arearegistration.cs。我的配置都指向正确版本的剃刀和MVC以及我的routes.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区域......

2 个答案:

答案 0 :(得分:1)

好的我知道发生了什么事。我会回答我自己的问题,希望能帮到别人。

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

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

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

答案 1 :(得分:0)

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

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