Come impostare il controller predefinito in asp.net MVC 4 e MVC 5


106

Come faccio a impostare il controller predefinito per il mio progetto ASP.NET MVC 4 senza renderlo HomeController ?

Come devo impostare un'Area predefinita all'avvio dell'applicazione?


come cambierebbe da "/" a "/ home come pagina principale? Questa" / home "deve essere visibile nel browser del cliente.
Andre Mesquita

Risposte:


165

il modo migliore è cambiare il percorso. Il percorso predefinito (definito in App_Start) imposta/Home/Index

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

come pagina di destinazione predefinita. Puoi cambiarlo in qualsiasi percorso desideri.

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Sales", action = "ProjectionReport", 
        id = UrlParameter.Optional }
);

13
In MVC 4 il percorso predefinito è impostato in App_Start / RouteConfig.cs
Eric Labashosky

Verissimo. Attualmente sto lavorando a progetti in entrambi e trascuro queste cose;)
Dave Alperovich

1
Dave ha ragione, ma vorrei aggiungere che in MVC 4 il routing non viene più eseguito in Global.asax, ma piuttosto in RouteConfig.cs in App_Start .
Buon Samaritano

2
Come farlo funzionare quando il controller a cui si fa riferimento nella rotta predefinita si trova in un'altra area (cioè non quella di root)?
superjos

dovresti essere in grado di fare in modo che il percorso predefinito vada a"AreaName/{controller}/{action}/{id}"
Dave Alperovich

30

Imposta sotto il codice in RouteConfig.cs nella cartella App_Start

public static void RegisterRoutes(RouteCollection routes)
{
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 routes.MapRoute(
 name: "Default",
 url: "{controller}/{action}/{id}",
 defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional });
}

SE ancora non funziona, eseguire i passaggi seguenti

Secondo modo: segui semplicemente i passaggi seguenti,

1) Fare clic con il pulsante destro del mouse sul progetto

2) Seleziona Proprietà

3) Selezionare l'opzione Web, quindi selezionare la pagina specifica (controller / vista) e quindi impostare la pagina di accesso

Qui, Account è il mio controller e Login è il mio metodo di azione (salvato in Account Controller)

Si prega di dare un'occhiata allo inserisci qui la descrizione dell'immaginescreenshot allegato .


15
Il tuo "secondo modo" riguarda ciò che accade quando esegui il debug del tuo progetto web. Non ha nulla a che fare con il "controller predefinito", ovvero quale pagina viene mostrata quando navighi nella pagina di destinazione del tuo sito.
Martin Liversage

25

Non ho visto la risposta a questa domanda:

Come devo impostare un'Area predefinita all'avvio dell'applicazione?

Quindi, ecco come puoi impostare un'Area predefinita:

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

1
grande domanda, perché non lo crei come uno?
stuartdotnet

Cos'è un '"Area"? Se definisco una vista, viene caricato il layout di riferimento e quindi una richiesta HTTP separata con i dati della mia vista? (cioè operazione Ajax separata) o il layout è reso e avvolto intorno alla mia vista?
Gus Crawford,

2
@GusCrawford Cos'è un '"Area"? Da msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx : per ospitare progetti di grandi dimensioni, ASP.NET MVC consente di partizionare le applicazioni Web in unità più piccole denominate aree. Le aree forniscono un modo per separare una grande applicazione Web MVC in raggruppamenti funzionali più piccoli. Un'area è effettivamente una struttura MVC all'interno di un'applicazione. Un'applicazione potrebbe contenere diverse strutture MVC (aree).
Amna Ali

Per quanto riguarda l'altra domanda, non credo sia correlata a questa risposta, e non mi sembra pertinente nemmeno alla domanda originale. Forse dovresti pubblicarlo da qualche altra parte.
Amna Ali

Chiederò separatamente in un nuovo thread di risposta grazie per la prospettiva.
Gus Crawford

2

Nel caso in cui tu abbia un solo controller e desideri accedere a ogni azione su root, puoi saltare il nome del controller in questo modo

routes.MapRoute(
        "Default", 
        "{action}/{id}", 
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);
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.