Establecer "Página de inicio" en Asp.Net MVC

105

En asp.net MVC, la "página de inicio" (es decir, la ruta que se muestra al ingresar a www.foo.com) está configurada en Inicio / Índice.

  • ¿Dónde se almacena este valor?
  • ¿Cómo puedo cambiar la "página de inicio"?
  • ¿Hay algo más elegante que usar RedirectToRoute () en la acción Index del controlador doméstico?

Intenté hacer grepping para Home / Index en mi proyecto y no pude encontrar una referencia, ni pude ver nada en IIS (6). Miré la página default.aspx en la raíz, pero eso no pareció hacer nada relevante.

Gracias

NikolaiDante
fuente

Respuestas:

150

Mira el Default.aspx/Default.aspx.csy Global.asax.cs

Puede configurar una ruta predeterminada:

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

Simplemente cambie los nombres de Controlador / Acción a los valores predeterminados que desee. Esa debería ser la última ruta en la tabla de enrutamiento.

Michael Stum
fuente
6
@NikolaiDante, deberías hacer de ese comentario una respuesta, ya que casi me lo pierdo y es más rápido que esta respuesta. :) Gracias
GazB
3
En MVC 5. si tiene un formulario de inicio de sesión, cuando haga clic en iniciar sesión en la página de inicio, se redireccionará al controlador de inicio, no al controlador personalizado especificado en la ruta. La acción de registro hará algo similar. Entonces, además de cambiar routeconfig, también es necesario cambiar algún código donde se llama a RedirectionToAction ("Index", "Home") y reemplazarlo con su propio controlador y nombres de acción.
anIBMer
Vale la pena señalar que puede tener múltiples rutas . Este podría ser el predeterminado con los parámetros de URL en BLANCO, pero probablemente desee una segunda ruta como url: "{controller}/{action}/{id}". Simplemente dé a las rutas diferentes nombres.
Jess
Esta respuesta puede funcionar para usted, pero si necesita varias rutas, consulte aquí stackoverflow.com/a/8470531/1804678
Jess
1
Esta respuesta solo es adecuada para MVC 3 y versiones anteriores. Vea mi respuesta a continuación para conocer el enfoque recomendado de MVC 4 y versiones posteriores.
JTW
19

ASP.NET Core

El enrutamiento se configura en el Configuremétodo de la Startupclase. Para configurar la "página de inicio", simplemente agregue lo siguiente. Esto hará que los usuarios sean enrutados al controlador y la acción definida en el método MapRoute cuando / si navegan a la URL base de su sitio, es decir, yoursite.com enrutará a los usuarios a yoursite.com/foo/index:

app.UseMvc(routes =>
{
   routes.MapRoute(
   name: "default",
   template: "{controller=FooController}/{action=Index}/{id?}");
});

Pre-ASP.NET Core

Utilice el método RegisterRoutes ubicado en App_Start / RouteConfig.cs (MVC 3 y 4) o Global.asax.cs (MVC 1 y 2) como se muestra a continuación. Esto hará que los usuarios sean enrutados al controlador y la acción definida en el método MapRoute si navegan a la URL base de su sitio, es decir, yoursite.com enrutará al usuario a yoursite.com/foo/index:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    // Here I have created a custom "Default" route that will route users to the "YourAction" method within the "FooController" controller.
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "FooController", action = "Index", id = UrlParameter.Optional }
    );
}
JTW
fuente
5

Paso 1: haga clic en el archivo Global.asax en su solución.

Paso 2: luego vaya a Definición de

RouteConfig.RegisterRoutes(RouteTable.Routes);

Paso 3: cambiar el nombre del controlador y el nombre de la vista

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(name: "Default",
                        url: "{controller}/{action}/{id}",
                        defaults: new { controller = "Home", 
                                        action = "Index", 
                                        id = UrlParameter.Optional }
                        );
    }
}
Ankur Shah
fuente
4
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",               
            defaults: new { controller = "Your Controller", action = "Your Action", id = UrlParameter.Optional }
        );
    }
}
Niraj
fuente
3

comprobar el método RegisterRoutes en global.asax.cs - es el lugar predeterminado para la configuración de la ruta ...

Michał Chaniewski
fuente
2

Enrutamiento de atributos en MVC 5

Antes de MVC 5, podía asignar URL a acciones y controladores específicos llamando routes.MapRoute(...)al archivo RouteConfig.cs. Aquí es donde se almacena la URL de la página de inicio ( Home/Index). Sin embargo, si modifica la ruta predeterminada como se muestra a continuación,

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

tenga en cuenta que esto afectará las URL de otras acciones y controladores. Por ejemplo, si tenía una clase de controlador nombrada ExampleControllery un método de acción dentro de ella llamado DoSomething, entonces la URL predeterminada esperada ExampleController/DoSomethingya no funcionará porque se cambió la ruta predeterminada.

Una solución para esto es no meterse con la ruta predeterminada y crear nuevas rutas en el archivo RouteConfig.cs para otras acciones y controladores como ese,

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
    name: "Example",
    url: "hey/now",
    defaults: new { controller = "Example", action = "DoSomething", id = UrlParameter.Optional }
);

Ahora, la DoSomethingacción de la ExampleControllerclase se asignará a la URL hey/now. Pero esto puede resultar tedioso cada vez que desee definir rutas para diferentes acciones. Entonces, en MVC 5 ahora puede agregar atributos para hacer coincidir las URL con acciones como esta,

public class HomeController : Controller
{
    // url is now 'index/' instead of 'home/index'
    [Route("index")]
    public ActionResult Index()
    {
        return View();
    }
    // url is now 'create/new' instead of 'home/create'
    [Route("create/new")]
    public ActionResult Create()
    {
        return View();
    }
}
Chris Gong
fuente
1

Intenté la respuesta pero no funcionó para mí. Esto es lo que terminé haciendo:

Cree un nuevo controlador DefaultController. En la acción de índice, escribí una redirección de línea:

return Redirect("~/Default.aspx")

En RouteConfig.cs, cambie controller = "Default" para la ruta.

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
vickey1611
fuente
probablemente olvidó omitir la palabra "Controlador" en el nombre del controlador, creando una ruta predeterminada
amarax
0

Si no desea cambiar el enrutador, simplemente vaya al HomeController y cambie MyNewViewHere en el índice de esta manera:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
Martin Kei
fuente