我有语言选择的MVC4项目:
用1个主要部分:
和3个区域:
在各区域I具有至少一个控制器,例如在联系我有其含有的Index.aspx页对应的视图文件夹概览控制器概述 。
主页和所有主要的网页(约,常见问题解答等)工作,并可以参观)。
然而,当我按照网址:本地主机:XXXX / EN /管理/概述我得到的错误
为路径控制器“/ EN /管理/概述”未找到或没有实现一个IController。
即便如此,该路线是正确的(我可以看到这与路线调试器)。 错误页面还显示,当我想我加载主菜单项的错误被抛出:
<nav id="site-navigation" class="eightcol">
@Html.Action("MenuItems", "Common")
</nav>
-代码删除,因为不相关的-
一切似乎是为了,但MVC似乎并不能够加载菜单,它位于主要部分。
所以,问题的根源是:我能给予的区域(例如管理员)访问控制器中的主要部分(家中,常见的,约等),我的项目?
Answer 1:
我发现它。
当一个页面中,位于一个区域内,想要访问位于此区域之外的控制器(如共享布局页面或不同的区域内的某些页),需要添加该控制器的区域。 由于共同的控制器是不是在一个特定的区域,但主要项目的一部分,你必须离开该区域空:
@Html.Action("MenuItems", "Common", new {area="" })
以上需要被添加到所有的行动和actionlinks由于布局页在整个不同区域共享。
这正是同样的问题在这里: 共享的布局ASP.NET MVC区
编辑 :要清楚,这个标记为答案,因为这是我的问题的答案。 以上答案可能解决触发同样的错误的原因。
Answer 2:
在我的情况下,同样的错误是不相关的领域,但认为帖子引起我的情况的错误,这可能是谁通过搜索来此线程的人有帮助的“为路径,控制器没有被发现,或者不执行一个IController “
该错误是因为在_Layout.cshtml文件输入错误引起的。
@Styles.Render("~/Content/misc")
这个名字捆绑在BundleConfig.cs辗转却忘了在_Layout.cshtml删除
这是愚蠢的,但我们的程序员总是做很多愚蠢的错误:)
Answer 3:
此外,对于那些谁上述解决方案没有奏效,这里是为我工作:
我有多个项目的解决方案。 所有项目都是在MVC3。 我在我的机器上安装了Visual Studio 2012和似乎有些项目被自动升级为MVC4。
我得到了这个问题
为路径“的/ etc /等”未找到,或者不执行一个IController控制器
因为处理这条路线的项目指向MVC4。
我不得不手动更新其参考使用MVC3。 你也可以做到这一点的用文本编辑器打开.csproj的文件。 找到参考MVC3并删除这一行:
<SpecificVersion>False</SpecificVersion>
Answer 4:
这个错误也可以通过一个事实,即控制器必须(在他们的名字)这个词引起的Controller
; 即: HomeController
; 除非你实现你自己ControllerFactory
。
Answer 5:
在我的情况下,问题是,控制器类尚未公开宣布。
class WorkPlaceController : Controller
该解决方案是
public class WorkPlaceController : Controller
Answer 6:
又一可能根本原因该错误如果用于区登记类的命名空间不匹配用于控制器的命名空间。
在控制器类如正确的命名:
namespace MySystem.Areas.Customers
{
public class CustomersController : Controller
{
...
}
}
随着区域注册类不正确的命名:
namespace MySystem.Areas.Shop
{
public class CustomersAreaRegistration : AreaRegistration
{
...
}
}
(以上命名空间应该是MySystem.Areas.Customers
。)
我将永远学会停止复制和粘贴代码? 可能不是。
Answer 7:
这是我的问题,什么为我工作的解决方案。
我添加了一个新的控制器,一个动作一个字符串返回到现有的应用程序。 但是,当我通过浏览器导航到该控制器,我得到了同样的错误,如上所述。
做谷歌搜索的很多之后,我发现我只是不得不修改我的Global.asax.cs文件,以使其识别新控制器。 我所做的只是增加了一个空间的Global.asax.cs文件,以便修改它和它的工作
Answer 8:
在我的情况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" }
);
}
Answer 9:
不知道这是否击中从不同的角度来接受的答案的解决方案,但我发现我在地区部分控制器之一是坐错命名空间。 更正命名空间:
Areas.{AreaName}.Controller
固定我的问题。
我怀疑的关键因素是有所有给定区域内共享同一命名空间的控制器。
Answer 10:
在我来说,我有@{ Html.RenderAction("HeaderMenu", "Layout", new { Area = string.Empty }); }
@{ Html.RenderAction("HeaderMenu", "Layout", new { Area = string.Empty }); }
在_Layout.cshtml但LayoutController根本不存在! (我已经从另一溶液复制_Layout.cshtml但忘了控制器复制)
Answer 11:
此错误的一个原因等:在Html.ActionLink可能已经打算布局文件不小心使用Html.Action的。 如果由Html.Action引用视图使用相同的版式文件你有效地创建了一个无限循环。 (布局视图加载引用视图局部视图,然后加载,加载被引用视图布局视图...)如果设置在布局文件和单步通过Htlm.Action断点,有时会得到更多的帮助关于过度堆栈大小的消息。
Answer 12:
令人尴尬的是在我的情况的问题是, 我还没有加入控制器后重建的代码 。
所以,也许要检查的第一件事是,你的控制器建成并在当前的二进制文件(及公众)。 如果你像我一样这可能会给您节省调试几分钟。
Answer 13:
在另一种情况下只是我想补充的是,我的方案,名称空间是用于控制不同,因为它是从另一个项目复制器的错误。
Answer 14:
如果适合你的设计,你可以确保访问修饰符的控制器类是“公”,不是东西,可能会限制像“内部”或“私人”的访问。
Answer 15:
在我的遗留应用程序的情况下,当我说下面的web.config文件条目节点下出现问题<system.webServer>
<modules runAllManagedModulesForAllRequests="true"></modules>
当我删除它,这个问题解决了。
Answer 16:
如果不包括在.csproj的文件编译过程中你的控制器类也会发生此问题。
<Compile Include="YOUR_CONTROLLER_PATH.cs" />
Answer 17:
在此基础上回答乔治,我,我已经把我的控制器正确的我来说,发现ThingController
,我不得不对控制器正确定义的方法Edit
。
但是..我引用它在我的观点
<a href="/App/ThingController/Edit" />
我应该一直只使用名称,而无需像字控制器
<a href="/App/Thing/Edit" />
Answer 18:
在我的Global.asax / Application_Start方法中的情况下,我注册网页API的路线,像这样的MVC路由后:
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);
还原解决了该问题的顺序
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
文章来源: The controller for path was not found or does not implement IController