path控制器未find或未实现IController

我有一个MVC4项目的语言select:

  • NL
  • FR

1主要部分:

  • 关于
  • 常见(菜单)
  • 联系
  • 常问问题

和3个方面:

  • pipe理员
  • 顾客

在每个区域,我至less有一个控制器,例如在pipe理员我有控制器概述与相应的视图文件夹概述 ,其中包含一个index.aspx页面。

主页和所有的主页(关于,常见问题等)工作,可以访问)。

但是,当我按照url:localhost:xxxx / en / admin / overview我得到错误

path'/ en / admin / overview'的控制器未find或未实现IController。

即使路由是正确的(我可以看到这个与路由debugging器)。 错误页面还显示,当我想要加载我的主菜单项时,错误被抛出:

<nav id="site-navigation" class="eightcol"> @Html.Action("MenuItems", "Common") </nav> 

– 因为不相关的代码被删除 –

一切似乎都是为了顺序,但MVC似乎无法加载位于主要部分的菜单。

所以,问题的根源在于:我可以在我的项目的主要部分(主页,公用,关于等)授予一个区域(例如Admin)访问控制器吗?

我find了

当位于区域内的页面要访问位于该区域之外的控制器(例如共享布局页面或不同区域内的特定页面)时,需要添加该控制器的区域。 由于公共控制器不在特定区域,而是主项目的一部分,因此必须将区域留空:

 @Html.Action("MenuItems", "Common", new {area="" }) 

由于布局页面在各个区域共享,所以需要将以上内容添加到所有的操作和操作链接中。

这是完全一样的问题,在这里: ASP.NET MVC区域共享布局

编辑 :要清楚,这是标记为答案,因为这是我的问题的答案。 以上答案可能解决触发相同错误的原因。

在我的情况下,同样的错误是没有涉及到区域,但认为发布在我的情况造成的错误,这可能会有助于谁来到这个线程的人通过search“path控制器没有find或没有实现IController “

错误是由于在_Layout.cshtml文件中input错误而引起的。

 @Styles.Render("~/Content/misc") 

BundleConfig.cs中删除了该名称的包,但忘记了在_Layout.cshtml中将其删除

这是愚蠢的,但我们的程序员总是做很多愚蠢的错误:)

另外,对于那些上面的解决scheme没有工作的人来说,这是对我有用的东西:

我有一个解决scheme与多个项目。 所有项目都在MVC3中。 我在我的机器上安装了Visual Studio 2012,似乎有些项目自动升级到MVC4。

我有这个问题

path“/ etc / etc”的控制器未find或未实现IController

因为处理该路线的项目指向了MVC4。

我不得不手动更新他们的参考使用MVC3。 您也可以使用文本编辑器打开.csproj文件。 find对MVC3的引用并删除这一行:

 <SpecificVersion>False</SpecificVersion> 

这个错误也可能是由于控制器必须(在他们的名字中)有Controller这个词。 即: HomeController ; 除非你实现你自己的ControllerFactory

在我的情况下,问题是控制器类尚未公布。

 class WorkPlaceController : Controller 

解决scheme是

 public class WorkPlaceController : Controller 

此错误的另一个可能的根本原因是如果区域注册类的名称空间不匹配控制器的名称空间。

例如控制器类上正确的命名:

 namespace MySystem.Areas.Customers { public class CustomersController : Controller { ... } } 

由于区域注册类的命名不正确:

 namespace MySystem.Areas.Shop { public class CustomersAreaRegistration : AreaRegistration { ... } } 

(上面的命名空间应该是MySystem.Areas.Customers 。)

我会学习停止复制和粘贴代码吗? 可能不会。

这是我的问题和解决scheme,为我工作。

我添加了一个新的控制器一个单一的操作返回一个string到现有的应用程序。 但是,当我通过浏览器导航到该控制器,我得到了上述相同的错误。

经过大量的search,我发现我只是修改我的Global.asax.cs文件,以识别新的控制器。 我所做的只是向Global.asax.cs文件添加了一个空格,以便修改它并使其工作

在我的情况下,我有@{ Html.RenderAction("HeaderMenu", "Layout", new { Area = string.Empty }); } @{ Html.RenderAction("HeaderMenu", "Layout", new { Area = string.Empty }); }在_Layout.cshtml中,但LayoutController不存在! (我从另一个解决scheme复制了_Layout.cshtml,但忘了复制控制器)

不知道这是否从不同的angular度解决了接受的答案,但是我发现我的一个控制器在Areas部分坐在错误的命名空间中。 将名称空间更正为:

 Areas.{AreaName}.Controller 

为我解决了这个问题。

我怀疑关键的因素是让给定区域内的所有控制器共享相同的命名空间。

在我的情况下, namespaces参数与控制器的命名空间不匹配。

 public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Admin_default", "Admin/{controller}/{action}/{id}", new {controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new[] { "Web.Areas.Admin.Controllers" } ); } 

这个错误的另一个原因是:在Html.ActionLink可能已经打算的布局文件中偶然使用Html.Action。 如果Html.Action引用的视图使用相同的布局文件,那么您实际上已经创build了一个无限循环。 (布局视图加载引用视图作为部分视图,然后加载布局视图加载引用的视图…)如果您在布局文件中设置断点,并通过Htlm.Action单步骤有时会得到更多的帮助有关过多堆栈大小的消息。

在另一种情况下,我想补充是在我的情况下,名称空间是不同的控制器,因为它是从另一个项目复制控制器的错误。

如果适合您的devise,您可以确保控制器类上的访问修饰符是“公开”的,而不是像“内部”或“私人”那样限制访问的东西。

令人尴尬的是,在我的情况下,问题是我添加控制器后没有重build代码

所以也许首先要检查的是你的控制器是在二进制文件中构build和存在的(并且是公共的)。 如果你和我一样,它可以节省你几分钟的debugging时间。