none
Establecer página principal MVC 3 con Razor RRS feed

  • Pregunta

  • Estoy teniendo el siguiente problema cuando estoy intentando asignar la página "Register.cshtml" como página principal.

     

    Error de servidor en la aplicación '/'.

    No se encuentra el recurso.

     Descripción: HTTP 404. El recurso que está buscando (o una de sus dependencias) se puede haber quitado, haber cambiado de nombre o no estar disponible temporalmente. Revise la dirección URL siguiente y asegúrese de que está escrita correctamente. 

    Dirección URL solicitada: /Views/Account/Register.cshtml


    Información de versión: Versión de Microsoft .NET Framework:4.0.30319; Versión ASP.NET:4.0.30319.272

     

    Establesco la página, haciendo click derecho en tal página, y eligiendo la opción "Establecer como página principal".

     

    Espero puedan ayudarme.

     

    ¡MUCHAS GRACIAS!

    jueves, 12 de enero de 2012 23:26

Respuestas

  • Buenas!

    En ASP.NET MVC NO se establece así la página inicial. Lo que has hecho hace que VS haga una petición a http://localhost/Views/Account/Register.cshtml pero estas peticiones no son válidas en ASP.NET MVC.

    En ASP.NET MVC las peticiones van siempre contra una acción de un controlador. Quien determina que controlador y acción se usa es la tabla de rutas. No hay peticiones a archivos .cshtml (verás que nunca aparecen extensiones en ASP.NET MVC y eso es porque no hablamos de páginas .aspx o .cshtml, hablamos de acciones que devuelven vistas).

    Si lo que quieres es que la página inicial sea esta, primero debes tener una acción de un controlador que la devuelva. Si usas el template de "Internet application" de VS creo que el controlador Account (/Controllers/AccountController.cs) tiene una acción llamada Register que devuelve dicha vista. En ASP.NET MVC establecer una "vista como inicial" significa indicar que acción debe ejecutarse en caso de que el usuario entre http://localhost/ sin nada más.

    Para ello, vete a Global.asax, y verás una línea parecida a:

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

    Modíficala para que sea:

                routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Account", action = "Register", id = UrlParameter.Optional } // Parameter defaults
                );<br/>
    

    Con eso has establecido la accion Register del controlador Account como predeterminada. Ahora vete a propiedades del proyecto (Project -> Properties -> Web y borra lo que haya en el texto "Specific Page". De este modo quitas la página inicial de VS.

    Ahora si le das a F5 verás que se llama a http://localhost sin nada más y que se muestra la página de registro.

    Un saludo!

    PD (autobombo): Si me lo permites, creo que tienes algunos de los conceptos clave de ASP.NET MVC un poco verdes. Te recomiendo el manual de ASP.NET MVC que estoy realizando para la gente de desarrolloweb, donde puedes encontrar explicados todos esos conceptos empezando desde cero: http://www.desarrolloweb.com/manuales/framework-asp-net-mvc.html


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    • Marcado como respuesta Augusto Pedraza viernes, 13 de enero de 2012 10:03
    viernes, 13 de enero de 2012 9:05

Todas las respuestas

  • Buenas!

    En ASP.NET MVC NO se establece así la página inicial. Lo que has hecho hace que VS haga una petición a http://localhost/Views/Account/Register.cshtml pero estas peticiones no son válidas en ASP.NET MVC.

    En ASP.NET MVC las peticiones van siempre contra una acción de un controlador. Quien determina que controlador y acción se usa es la tabla de rutas. No hay peticiones a archivos .cshtml (verás que nunca aparecen extensiones en ASP.NET MVC y eso es porque no hablamos de páginas .aspx o .cshtml, hablamos de acciones que devuelven vistas).

    Si lo que quieres es que la página inicial sea esta, primero debes tener una acción de un controlador que la devuelva. Si usas el template de "Internet application" de VS creo que el controlador Account (/Controllers/AccountController.cs) tiene una acción llamada Register que devuelve dicha vista. En ASP.NET MVC establecer una "vista como inicial" significa indicar que acción debe ejecutarse en caso de que el usuario entre http://localhost/ sin nada más.

    Para ello, vete a Global.asax, y verás una línea parecida a:

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

    Modíficala para que sea:

                routes.MapRoute(
                    "Default", // Route name
                    "{controller}/{action}/{id}", // URL with parameters
                    new { controller = "Account", action = "Register", id = UrlParameter.Optional } // Parameter defaults
                );<br/>
    

    Con eso has establecido la accion Register del controlador Account como predeterminada. Ahora vete a propiedades del proyecto (Project -> Properties -> Web y borra lo que haya en el texto "Specific Page". De este modo quitas la página inicial de VS.

    Ahora si le das a F5 verás que se llama a http://localhost sin nada más y que se muestra la página de registro.

    Un saludo!

    PD (autobombo): Si me lo permites, creo que tienes algunos de los conceptos clave de ASP.NET MVC un poco verdes. Te recomiendo el manual de ASP.NET MVC que estoy realizando para la gente de desarrolloweb, donde puedes encontrar explicados todos esos conceptos empezando desde cero: http://www.desarrolloweb.com/manuales/framework-asp-net-mvc.html


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    • Marcado como respuesta Augusto Pedraza viernes, 13 de enero de 2012 10:03
    viernes, 13 de enero de 2012 9:05
  • Hola, Eduard! Yo justamente estoy haciendo los ejemplos de tu libro, el que citás en autobombo (ja!), pero justamente me pasó lo mismo que a Augusto Pedraza, cuando estaba haciendo los primeros ejemplos y empezás a poner Index2, Index3 y no doy pie con bola para entender dónde hay que escribir ese código y que funcione porque o siempre llama a Index, o me pasa lo que a Augusto... Buaaaa!

    Supongo que más adelante en el libro lo explicás, estoy maravillada, ya que está muy bien explicada la parte teórica.

    Pero sigo sin encontrar un lugar dónde expliquen bien este tema del Global.asax, las propiedades del proyecto, etc.

    Saludos.

    jueves, 15 de enero de 2015 18:40
  • Excelente !! Resolvio el problema
    miércoles, 18 de octubre de 2017 21:51