5

He agregado 3 controladores, y para uno de ellos la vista de índice no funciona de manera predeterminada.MVC Controller Index a veces 404?

Works(shows index): 
http://localhost:1767/Employees/ 
http://localhost:1767/Employees/Index 
http://localhost:1767/Home/  
http://localhost:1767/Home/Index 
http://localhost:1767/ 
http://localhost:1767/Companies/Index 

Doesn't work(gives 404 error): 
http://localhost:1767/Companies/ 

1) Creé una biblioteca de clase de entidad de marco, generada a partir de una base de datos que contiene una tabla de Empleados y Empresas.

2) Creó un proyecto vacío MVC 3.

3) Se ha agregado una referencia de proyecto del proyecto MVC al proyecto de biblioteca de clase EF.

4) Añadido un controlador, y en el diálogo de controlador add I eligió el modelo EF y una de las mesas y nombrado el controlador CompaniesController

5) Entonces recordé que necesitaba un HomeController, lo que añade otro controlador , nombrándolo HomeController, y de nuevo elegimos la entidad Empresas.

6) Finalmente agregué un EmployeesController que seleccionaba la entidad Employees.

Ésta es la única ruta en mis Global.asax.cs:

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 

¿Por qué no el defecto http://localhost:1767/Companies/ URL para la acción index como todos los otros controladores? He hecho algunos proyectos de MVC de práctica y parece que siempre tengo este problema. El controlador de Empleados que está en default, funciona bien, aunque no haya una ruta que le indique que haga esto.

Editar: Aquí está el error que recibo:

The resource cannot be found. 
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /Companies/ 

Editar: Así que por lo general no revelan los nombres de mis entidades o detalles del dominio cuando se publican ejemplos en línea, pero en este caso se llama realmente Empresas Propiedades y cambiar el nombre a Propiedades2 para la carpeta de vista y el controlador corrigió el problema. Por lo tanto, parece que Properties es una palabra clave especial que rompe el valor predeterminado en Index si aparece en una URL

Respuesta

5

Cambié la carpeta de visualización y el controlador de Propiedades (Controlador) a Propiedades2 (Controlador) y funciona bien ahora. Aparentemente, "Propiedades" tiene un manejo especial en una URL y rompe el valor predeterminado para indexar

+0

creo que podría ser debido a que las propiedades es AssemblyInfo.cs la celebración de carpeta estándar (plantilla de proyecto) . Debería haber sido un mensaje de error 4XX, no estoy seguro de por qué recibió 404. – Lokeshwer

+0

Bingo ... tenía EXACTAMENTE este problema. –

2

¿Tiene una vista de índice en sus carpetas de Vistas en Empresas? es decir Views/Companies/Index.aspx?

La única razón por la que no funcionaría (según la información proporcionada) fue por error de ortografía, el controlador de Companies no hereda del controlador o implementa la interfaz de IController, o la vista no aparece en Views/Controller carpeta para la acción Index.

Editado: Esto es lo que esperaría el CompaniesController para que parezca:

namespace MyProject.Controllers 

public class CompaniesController : Controller 
{ 
    [HttpGet] 
    public ActionResult Index() { 
     return View(); 
    } 
} 

y sería residir en la carpeta Controladores de su proyecto.

+0

Sí, hay un Index.cshtml, dejo que el cuadro de diálogo Agregar controlador haga todos los andamios por mí, así que no sé cómo habría llegado el otro acciones correctas pero erróneas Index – AaronLS

+0

¿Puede publicar el resumen del error que aparece, es decir, dice algo así como no se puede ubicar la vista de índice? Las carpetas buscadas son Vistas/Índice, Vistas/Compartidas, .... etc – dreza

+0

He editado la publicación con el mensaje de error. Es simplemente el error 404 habitual que utiliza MVC. – AaronLS

3

¿Agregó una acción de índice a su CompaniesController?

[HttpGet] 
public ActionResult Index() 
{ 
    return View(); 
} 
+0

Además, asegúrese de tener un archivo Index.cshtml o Index.aspx (el motor de visualización que esté utilizando) en la carpeta Vistas/Empresas –

+0

Sí. He estado simplemente dejar que el diálogo Agregar controlador de hacer todo eso andamios para mí, pero lo hice verificar existe una 'Índice ViewResult pública()' – AaronLS

3

Recibí 403.1 porque tenía el nombre de la carpeta igual que el nombre del controlador en el directorio raíz del proyecto web.Por lo tanto, incluso antes de que alcance la resolución de ruta MVC, falla al intentar enumerar el contenido de la carpeta. Puede ser un problema similar con las propiedades siendo una carpeta estándar en cualquier proyecto

+0

Tuve el 404 como se describe, pero este era el problema: tengo un controlador llamado DevelopmentController.cs, y también tenía un directorio llamado Desarrollo. Cambió el nombre del directorio a Dev, ¡días felices! – Eraph

Cuestiones relacionadas