Tengo una MVC4 proyecto de selección de idioma:

  • en
  • nl
  • fr
  • de

1 parte principal con:

  • Sobre
  • Común (para el menú)
  • Contacto
  • Faq
  • Casa

Y 3 áreas:

  • Admin
  • Clientes
  • Tienda

En cada área que tiene al menos un controlador, por ejemplo en Admin tengo el controlador de resumen con la vista correspondiente carpeta resumen que contiene un índice.aspx página.

La página principal y todas las páginas principales (acerca de, preguntas frecuentes, etc.) de trabajo y que pueden ser visitados).

Sin embargo, cuando me siga la dirección url: localhost:xxxx/es/admin/resumen
Obtengo el error:

El controlador de ruta ‘/es/admin/visión general», no se encontró o no implementar IController.

Aunque la ruta es correcta (puedo ver esto con la Ruta Depurador), la página de error también muestra que el error se produce cuando quise cargar mis elementos del menú principal:

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

— Código de quitar porque irrelevante —

Todo parece estar en orden, pero MVC no parece ser capaz de cargar el menú, que se encuentra en la parte principal.

Así, la raíz del problema es:
Puedo conceder un área (por ejemplo, Admin) el acceso a los controladores en la parte principal (home, común, sobre, etc.) de mi proyecto?

  • Has probado a comentar la llamada a Html.Acción para aislar el problema para el controlador específico?
  • Yo todavía no, pero ahora lo hice y es como yo pensaba. El Área de Administración utiliza el diseño de la parte principal de mi proyecto y, cuando llega a la Acción el área intenta acceder al controlador que no está ubicado en el área que produce el error. En otras palabras, la raíz del problema es, ¿cómo puedo conceder un área de acceso a los controladores en la parte principal (home, común, sobre, etc. los controladores) de mi proyecto?
  • La cuestión es llegar a más posibles problemas y soluciones. Por lo que es un debe, creo, a ver en otras respuestas y no sólo la aceptación de uno.
  • Tengo este mensaje cuando relativo referencias de imagen en CSS se rompe porque de StyleBundles

20 Comentarios

  1. 113

    Lo he encontrado.

    Cuando una página, que se encuentra dentro de un área, quiere acceder a un controlador que se encuentra fuera de esta área (como un compartida de diseño de página o una página determinada dentro de un área diferente), el área de este controlador debe ser agregado.
    Desde el común controlador no está en un área específica sino que forma parte del proyecto principal, tienes que salir de la zona vacía:

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

    El de arriba tiene que ser añadido a todas las acciones y actionlinks desde el diseño de la página es compartida en las diferentes áreas.

    Es exactamente el mismo problema que aquí:
    ASP.NET MVC Áreas compartidas de diseño

    Editar: Para que quede claro, esto está marcado como la respuesta porque era la respuesta para mi problema. Las respuestas anteriores pueden resolver las causas que desencadenan el mismo error.

    • Gracias, que trabajó para mí. Es una muy engañoso mensaje de error .NET diciendo que el controlador para la acción dentro de la zona no puede ser encontrado, que no es el caso en absoluto!
    • Esta solucionado mi problema. Supongo que la próxima vez debería empezar con el verde de la respuesta del cheque en lugar de en la parte superior de la lista.
  2. 15

    En mi caso, el mismo error no estaba relacionado con el Área, pero pensaba publicar el error causado en mi caso, que puede ser útil para las personas que vienen a este hilo buscando «El controlador de ruta no se encontró o no implementar IController»

    El error fue causado porque de entrada incorrecta en _Layout.cshtml archivo.

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

    El paquete con ese nombre fue eliminado en BundleConfig.cs pero se me olvidó quitar en _Layout.cshtml

    Era tonto, pero nosotros los programadores siempre hacer muchos errores tontos 🙂

    • Gracias por la solución. Es posible que existen varias soluciones para un aparentemente idénticas, pero en actuallity sólo un problema similar. Sin embargo, como mi pregunta dijo que me áreas de uso de mi propia solución seleccionada es todavía la más exacta.
  3. 14

    También, para aquellos que la solución anterior no funciona, aquí es lo que funcionó para mí:

    Tengo una solución con múltiples proyectos. Todos los proyectos fueron en MVC3. He instalado Visual Studio 2012 en mi máquina y parece que algunos de los proyectos que se actualiza automáticamente a MVC4.

    Tengo este problema,

    El controlador de ruta ‘/etc/etc’ no se encontró o no implementar IController

    porque el proyecto que estuvo a cargo de ruta que se apunta a MVC4.

    Tuve que actualizar manualmente sus referencias al uso MVC3. Usted también puede hacer que, al abrir el .csproj archivo con un editor de texto. Encontrar la referencia a MVC3 y quitar esta línea:

    <SpecificVersion>False</SpecificVersion>
    • Oh, dios mío. Eso es tan aleatorio y oscuro. Muchas gracias por publicar! 🙂 De los FUTUROS LECTORES: el Mío era sólo ligeramente diferente de la versión de la dll en sí fue de 4.0 en lugar de 3.0 – no estoy seguro de cómo lo tengo cambiado.
    • El problema con el mío fue similar; había una biblioteca compartida que se hace referencia en la capa de presentación y contenido de un controlador común, y de la biblioteca compartida fue el uso de mvc4, mientras que la capa de presentación fue el uso de mvc3. Una vez que he actualizado la biblioteca compartida para MVC3, se resuelve el problema.
  4. 12

    Este error también puede ser causada por el hecho de que los Controladores deben tener (en su nombre) la palabra Controller; a saber: HomeController; a menos que se implemente su propio ControllerFactory.

    • Esta fue mi error. Gracias George!
    • He tenido este problema. Fue porque me eliminan mi HomeController.cs archivo y no entendía lo que dependía de él.
    • Usted es el CEO
  5. 12

    en mi caso, el problema era que la clase de controlador no ha sido anunciado públicamente.

    class WorkPlaceController : Controller

    la solución fue

    public class WorkPlaceController : Controller
  6. 12

    Otra posible causa de este error es que si el espacio de nombres para el área de registro de la clase no coincide con el espacio de nombres para el controlador.

    E. g. nomenclatura correcta en el controlador de clase:

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

    Con la correcta nomenclatura en el área de registro de clase:

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

    (Espacio de nombres anteriores deben ser MySystem.Areas.Customers.)

    Nunca voy a aprender a dejar de copiar y pegar el código? Probablemente no.

    • Esto me sorprendió y era difícil de encontrar debido a que el espacio de nombres estaba equivocado cuando estaba en la raíz de la carpeta » controlador (código copiado de otro proyecto), pero no importa, antes de mudarme a un área.
  7. 6

    Aquí es mi problema y de la solución de que lo que funcionó para mí.

    He añadido un nuevo controlador con una sola acción de devolver una cadena a una aplicación existente. Pero cuando yo navegada a ese control a través de navegador, yo estaba recibiendo el mismo error, como se mencionó anteriormente.

    Después de hacer un montón de búsqueda en google, he encontrado que simplemente he tenido que modificar mi Mundial.asax.cs archivo para que se reconozca el nuevo controlador. Todo lo que hice fue añadido un espacio Global.asax.cs archivo para que sea modificado y se trabajó

    • Tenemos 3 servidores web de producción y 5 dev/máquinas de prueba. Sólo en una máquina de producción no fue a trabajar. La adición de un espacio y de ahorro Global.asax se corrigió. #mindblown
  8. 6

    En mi caso namespaces parámetro no fue coincidencia el espacio de nombres del controlador.

    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" }
        );
    }
  9. 5

    No estoy seguro si esto golpea la solución desde un ángulo diferente a la aceptada respuesta, pero me encontré con que uno de mis controladores en las Áreas de la sección estaba sentado en el mal de espacio de nombres. La corrección de que el espacio de nombres:

    Areas.{AreaName}.Controller

    solucionado el problema para mí.

    Sospecho que el factor clave fue tener todos los controladores dentro de un área determinada comparten el mismo espacio de nombres.

    • Desea que usted podría favorito respuestas y no sólo preguntas. He re-encontré con esta respuesta tantas veces. Ha sido tan útil, gracias.
  10. 5

    Otra de las causas de este error: el uso Accidental de Html.Acción en un archivo de Diseño donde Html.ActionLink puede haber sido la intención. Si la vista que hace referencia el código Html.Acción utiliza el mismo formato de archivo que efectivamente han creado un bucle sin fin. (La vista de diseño de la carga de la referencia a la vista como se vista parcial que luego se carga la vista de diseño en el que se carga la vista referenciada…) Si se establece un punto de interrupción en el archivo de Diseño y de un solo paso a través de la Htlm.Acción a veces más útil mensaje sobre el excesivo tamaño de la pila.

  11. 5

    En mi caso he tenido @{ Html.RenderAction("HeaderMenu", "Layout", new { Area = string.Empty }); } en _Layout.cshtml pero la LayoutController ¡no existen! (Yo había copiado _Layout.cshtml de otra solución, pero olvidó copiar el controlador)

  12. 2

    Si es apropiado para su diseño, usted puede asegurarse de que el modificador de acceso en el control de la clase es «público», no es algo que podría limitar el acceso como «internos» o «privado».

  13. 2

    Vergonzosamente, el problema en mi caso es que no he reconstruido el código después de agregar el controlador de.

    Así que tal vez la primera cosa a comprobar es que el controlador fue construido y está presente (y público) en los binarios. Es posible ahorrar unos minutos de depuración si usted es como mí.

    • Por supuesto que era mi problema… siempre Es lo más estúpido que se le.
  14. 1

    En otro escenario sólo me gustaría añadir es En mi escenario, el espacio de nombre fue diferente para el controlador, ya que fue error de la copia de controlador de otro proyecto.

  15. 1

    En mi caso de legado de la aplicación, el problema se produjo cuando he añadido debajo de la entrada en la web.archivo de configuración en el nodo <system.webServer>

           <modules runAllManagedModulesForAllRequests="true"></modules>

    Cuando me la quitó, la cuestión se resuelva.

  16. 1

    Este problema también se produce si no se incluye el controlador de clase de compilación proceso en el .csproj archivos.

    <Compile Include="YOUR_CONTROLLER_PATH.cs" />
  17. 1

    En mi caso en el global.asax/método application_start,
    Me estaba registrando en la web de la api de rutas DESPUÉS de mvc rutas como:

    RouteConfig.RegisterRoutes(RouteTable.Routes);
    GlobalConfiguration.Configure(WebApiConfig.Register);

    Revertir el orden solucionado el problema

    GlobalConfiguration.Configure(WebApiConfig.Register);            
    RouteConfig.RegisterRoutes(RouteTable.Routes);
  18. 1

    En mi caso, fue debido a que el controlador se denomina incorrectamente. Me llama LayoutController, pero debería haber llamado Diseño lugar:

    <a class="nav-link" href="#">@Html.Action("GetCurrentUser", "LayoutController" })</a>

    debe ser:

    <a class="nav-link" href="#">@Html.Action("GetCurrentUser", "Layout")</a>
  19. 1

    En mi caso, era la representación de otro método de acción para mi sección de menú en _layout.cshtml archivo con @Html.La acción(«Menú», «menu» (Menú) mientras se me olvidó crear Menú controlador y como archivo de diseño estaba siendo utilizada en mi controlador actual de la acción, por tanto, estaba recibiendo este error en mi acción actual de procesamiento de la solicitud. trate de buscar en su diseño y así como el archivo de vista si lo hizo el mismo error

  20. 0

    Edificio en este respuesta por George, me he encontrado en mi caso que yo había puesto mi controlador correctamente como ThingController y tenía bien definido el método en que el controlador de Edit.

    Pero.. yo se que hace referencia a él en mi punto de vista con

    <a href="/App/ThingController/Edit" />

    Donde debería haber estado usando sólo el nombre sin la palabra controlador como

    <a href="/App/Thing/Edit" />

Dejar respuesta

Please enter your comment!
Please enter your name here