Impostare "Homepage" in Asp.Net MVC


105

In asp.net MVC la "homepage" (ovvero il percorso che viene visualizzato quando si tocca www.foo.com) è impostata su Home / Index.

  • Dove viene memorizzato questo valore?
  • Come posso cambiare la "homepage"?
  • C'è qualcosa di più elegante dell'utilizzo di RedirectToRoute () nell'azione Index del controller principale?

Ho provato a grepping per Home / Index nel mio progetto e non sono riuscito a trovare un riferimento, né ho potuto vedere nulla in IIS (6). Ho guardato la pagina default.aspx nella root, ma non sembrava fare nulla di rilevante.

Grazie

Risposte:


150

Guarda il Default.aspx/Default.aspx.cse il Global.asax.cs

Puoi impostare un percorso predefinito:

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

Basta cambiare i nomi del controller / azione per l'impostazione predefinita desiderata. Dovrebbe essere l'ultimo percorso nella tabella di instradamento.


6
@NikolaiDante dovresti rendere quel commento una risposta perché mi mancava quasi ed è più veloce di questa risposta. :) Grazie
GazB

3
In MVC 5. se si dispone di un modulo di login, quando si fa clic su login nella home page, verrà comunque reindirizzato al controller Home, non al controller personalizzato specificato nel percorso. l'azione register farà una cosa simile. Quindi, oltre a cambiare routeconfig, è necessario modificare anche un po 'di codice in cui chiamare RedirectionToAction ("Index", "Home") e sostituirlo con il proprio controller e nomi di azioni.
anIBMer

Vale la pena sottolineare che puoi avere più percorsi . Questo potrebbe essere il tuo valore predefinito con i parametri URL VUOTO, ma probabilmente vorrai un secondo percorso come url: "{controller}/{action}/{id}". Basta dare ai percorsi nomi diversi.
Jess

Questa risposta potrebbe funzionare per te, ma se hai bisogno di più percorsi, vedi qui stackoverflow.com/a/8470531/1804678
Jess

1
Questa risposta è adatta solo per MVC 3 e versioni precedenti. Vedi la mia risposta di seguito per l'approccio MVC 4 e successivo consigliato.
JTW

19

ASP.NET Core

Il routing è configurato nel Configuremetodo della Startupclasse. Per impostare la "homepage" è sufficiente aggiungere quanto segue. Ciò farà sì che gli utenti vengano instradati al controller e l'azione definita nel metodo MapRoute quando / se navigano verso l'URL di base del tuo sito, ovvero yoursite.com indirizzerà gli utenti a yoursite.com/foo/index:

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

Pre-ASP.NET Core

Utilizzare il metodo RegisterRoutes situato in App_Start / RouteConfig.cs (MVC 3 e 4) o Global.asax.cs (MVC 1 e 2) come mostrato di seguito. Questo farà sì che gli utenti vengano instradati al controller e l'azione definita nel metodo MapRoute se navigano all'URL di base del tuo sito, ovvero yoursite.com instraderà l'utente 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 }
    );
}

5

Passaggio 1: fare clic su File Global.asax nella soluzione.

Passaggio 2: quindi vai alla definizione di

RouteConfig.RegisterRoutes(RouteTable.Routes);

Passaggio 3: modificare il nome del controller e visualizzare il nome

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 }
                        );
    }
}

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 }
        );
    }
}

3

controlla il metodo RegisterRoutes in global.asax.cs - è il posto predefinito per la configurazione del percorso ...


2

Instradamento degli attributi in MVC 5

Prima di MVC 5, era possibile mappare gli URL ad azioni e controller specifici chiamando routes.MapRoute(...)il file RouteConfig.cs. Qui è dove viene memorizzato l'URL della home page ( Home/Index). Tuttavia, se modifichi il percorso predefinito come mostrato di seguito,

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

tieni presente che ciò influenzerà gli URL di altre azioni e controller. Ad esempio, se avevi una classe controller denominata ExampleControllere un metodo di azione al suo interno chiamato DoSomething, l'URL predefinito previsto ExampleController/DoSomethingnon funzionerà più perché la route predefinita è stata modificata.

Una soluzione alternativa per questo è non interferire con la rotta predefinita e creare nuove rotte nel file RouteConfig.cs per altre azioni e controller in questo modo,

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 }
);

Ora l' DoSomethingazione della ExampleControllerclasse verrà mappata all'URL hey/now. Ma questo può diventare noioso ogni volta che desideri definire percorsi per azioni diverse. Quindi in MVC 5 ora puoi aggiungere attributi per abbinare gli URL ad azioni in questo modo,

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();
    }
}

1

Ho provato la risposta ma non ha funzionato per me. Questo è quello che ho finito per fare:

Crea un nuovo controller DefaultController. Nell'azione index, ho scritto una riga di reindirizzamento:

return Redirect("~/Default.aspx")

In RouteConfig.cs, modifica controller = "Default" per la route.

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

probabilmente hai dimenticato di omettere la parola "Controller" nel nome del controller, creando un percorso predefinito
amarax

0

Se non vuoi cambiare il router, vai su HomeController e cambia MyNewViewHere nell'indice in questo modo:

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.