我遇到问题使用mvc 3和我的应用程序注册区域但在应用程序启动时没有功能:
{System.Web.HttpException (0x80004005): The controller for path '/Login/Index' was not
found or does not implement IController.
at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<BeginProcessRequest>b__2()
at System.Web.Mvc.SecurityUtil.<>c__DisplayClassb`1.<ProcessInApplicationTrust>b__a()
at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust[TResult](Func`1 func)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state)
at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)}
答案 0 :(得分:2)
如果在您的Area的错误命名空间中声明Controller类,则会发生此错误。确保命名空间与区域注册匹配。
答案 1 :(得分:0)
这意味着MVC找不到实现IController
的类,无论是通过默认的Controller
类还是其他一些机制,它在命名空间中也被命名为Index
{ {1}}。
一般来说,如果你构建MVC应用程序就像默认的MVC项目结构一样,那么你就不会遇到任何问题。
但是,如果您正在使用正确的文件夹结构,而且它说的是,那么您设置的{DefaultNamespace}.Controllers.Login
控制器无法正常继承。
这个答案当然是假设您使用的是在首次从模板创建项目时设置的基本默认路由。
答案 2 :(得分:0)
这是一个古老的问题,但我真的找不到其他地方的正确答案。这是我的解决方案:
我有一个包含多个项目的解决方案。所有项目都在MVC3中。我在我的机器上安装了Visual Studio 2012,似乎有些项目自动升级到MVC4。
我遇到了这个问题“The controller for path '/etc/etc' was not found or does not implement IController
”,因为处理该路由的项目是指向MVC4。
我不得不手动更新他们的引用以使用MVC3。您也可以通过使用文本编辑器打开.csproj文件来完成此操作。找到对MVC3的引用并删除此行:
<SpecificVersion>False</SpecificVersion>
答案 3 :(得分:0)
在我的情况下,默认路由new { controller = "Home", action = "Index", id = "" }
指向错误的控制器。
Global.asax.cs
protected void Application_Start(object sender, EventArgs e)
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
}