Me encuentro con el siguiente error con mi proyecto ASP.NET MVC 3:
Se encontraron varios tipos que coinciden con el controlador llamado 'Inicio'. Esto puede suceder si la ruta que atiende esta solicitud ('Inicio / {acción} / {id}') no especifica espacios de nombres para buscar un controlador que coincida con la solicitud. Si este es el caso, registre esta ruta llamando a una sobrecarga del método 'MapRoute' que toma un parámetro de 'espacios de nombres'.
La solicitud de 'Inicio' ha encontrado los siguientes controladores coincidentes: MyCompany.MyProject.WebMvc.Controllers.HomeController MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
Tengo un HomeController en mi carpeta de controlador predeterminada, con un nombre de clase de MyCompany.MyProject.WebMvc.Controllers.HomeController.
Mi método RegisterRoutes, en mi global.asax, se ve así:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
Luego tengo un área llamada Compañía, con un HomeController en la carpeta del controlador predeterminado para el área, con un nombre de clase de MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController.
El método RegisterArea en el archivo CompanyAreaRegistration se ve así:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Company_default",
"Company/{controller}/{action}/{id}",
new { area = "Company", action = "Index", id = UrlParameter.Optional }
);
}
Todo esto está provocando el error que destaqué al principio de esta publicación. Estoy luchando tratando de armar una solución de varias otras publicaciones, sin SUERTE .
¿Es posible tener un HomeController en la carpeta de controladores predeterminada y luego uno en CADA área? Si es así, ¿necesito hacer (asumiendo que lo hago) cambios en mi archivo de configuración para que esto funcione?
¡Cualquier ayuda será muy apreciada!
fuente
Respuestas:
El mensaje de error contiene la solución recomendada: "Si este es el caso, registre esta ruta llamando a una sobrecarga del método 'MapRoute' que toma un parámetro de 'espacios de nombres'".
Esto hará http: // server / vaya a la acción Index de su HomeController, que es, creo, lo que desea. http: // server / company / home irá a la acción del índice de HomeController del área de la empresa, como se define en el registro del área.
fuente
namespaces
parámetro es una matriz de cadenas, por lo que debería poder pasar cualquier número agregando a la matriz:new string[] { "MyCompany.MyProject.WebMvc.Controllers", "My.Second.Namespace", "My.Third.Namespace", "Namespaces.Etc" }
MyProject.Controllers
hizo sin embargo.MyCompany.MyProject.WebMvc.Areas.Company.Controllers.HomeController
clase se está ejecutando. Pero la Vista que aparece es la antigua.Este es el enfoque asp.net mvc4:
fuente
Había cambiado el nombre de los espacios de nombres, así que solo elimino las carpetas bin y obj y las reconstruyo , trabajo de nuevo.
fuente
Otra causa plausible de este problema se puede encontrar a continuación:
Se encontraron varios tipos que coinciden con el controlador llamado 'Inicio'
fuente
utilizar este
fuente
Use solo el nombre del proyecto:
fuente
Si está utilizando RazorGenerator, solo informa al
namespaces
parámetro podría no ser suficiente.Tengo que resolver agregando la declaración marcada a continuación en
Global.asax.cs
:fuente
Como Chris Moschini menciona, el parámetro de espacios de nombres puede no ser suficiente si tiene dos áreas con el mismo nombre de controlador con diferentes espacios de nombres y la ruta predeterminada de ninguna área devolverá un error de servidor 500.
Es "mejor" anular el controlador de ruta predeterminado y agregar esta línea:
fuente
Tuve este problema después de agregar una referencia a otro proyecto que tenía las mismas rutas y el problema continuó después de eliminar la referencia.
Se resuelve eliminando el archivo .dll de esa referencia agregada de la carpeta bin y reconstruyendo.
fuente
Como muchos otros, tuve este problema después de crear un nuevo proyecto de plantilla MVC desde el menú VS2017, al construir el proyecto recibía el mensaje de error de la operación. Luego utilicé la respuesta https://stackoverflow.com/a/15651619/2417292 publicada anteriormente en este hilo por cooloverride para proyectos mvc4. Esto todavía no solucionó mi problema, así que cambié el nombre de mi carpeta de vista de Inicio y el archivo de HomeController para que sea la carpeta de vista Company / y el archivo de controlador CompanyController. Esto funcionó para mí, no una solución por decir, sino una solución alternativa si no está atascado en tener la ruta Inicio / Índice, mi otro problema fue que no pude encontrar la referencia que causa el error y debido a que mi plataforma de desarrollo es Azure WebApplication vs a VM completa con un sistema de archivos completo y configuraciones de IIS para jugar.
fuente
Tuve el mismo problema y descubrí que la versión anterior había creado archivos compilados en la carpeta "bin".
Una vez que los eliminé, el error desapareció.
fuente