Comment définir le contrôleur par défaut dans asp.net MVC 4 et MVC 5

106

Comment définir le contrôleur par défaut pour mon projet ASP.NET MVC 4 sans en faire un HomeController ?

Comment dois-je configurer une zone par défaut au démarrage de l'application?

Adrian10 BEN
la source
comme changerait de "/" à "/ home en tant que page racine? Ce" / home "doit être visible dans le navigateur du client.
Andre Mesquita

Réponses:

165

le meilleur moyen est de changer votre itinéraire. La route par défaut (définie dans votre App_Start) définit/Home/Index

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

comme page de destination par défaut. Vous pouvez changer cela pour être n'importe quel itinéraire que vous souhaitez.

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Sales", action = "ProjectionReport", 
        id = UrlParameter.Optional }
);
Dave Alperovich
la source
13
Dans MVC 4, la route par défaut est définie dans App_Start / RouteConfig.cs
Eric Labashosky
Très vrai. Je travaille actuellement sur des projets dans les deux et néglige ces choses;)
Dave Alperovich
1
Dave a raison, mais j'aimerais ajouter que dans MVC 4 le routage ne se fait plus dans Global.asax, mais plutôt dans RouteConfig.cs sous App_Start .
Good Samaritan
2
Comment faire fonctionner cela quand le contrôleur référencé dans la route par défaut se trouve dans une autre zone (c'est-à-dire pas la racine)?
superjos
vous devriez être en mesure de rendre l'itinéraire par défaut"AreaName/{controller}/{action}/{id}"
Dave Alperovich
30

Définissez le code ci-dessous dans RouteConfig.cs dans le dossier 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 });
}

SI ne fonctionne toujours pas, suivez les étapes ci-dessous

Deuxième manière: vous suivez simplement les étapes ci-dessous,

1) Faites un clic droit sur votre projet

2) Sélectionnez Propriétés

3) Sélectionnez l'option Web, puis sélectionnez une page spécifique (contrôleur / vue), puis définissez votre page de connexion

Ici, le compte est mon contrôleur et la connexion est ma méthode d'action (enregistrée dans le contrôleur de compte)

Veuillez regarder la entrez la description de l'image icicapture d'écran ci- jointe .

Nimesh
la source
15
Votre «deuxième moyen» concerne ce qui se passe lorsque vous déboguez votre projet Web. Cela n'a rien à voir avec le "contrôleur par défaut", c'est-à-dire quelle page est affichée lorsque vous accédez à la page de destination de votre site.
Martin Liversage
25

Je n'ai pas vu cette question répondue:

Comment dois-je configurer une zone par défaut au démarrage de l'application?

Alors, voici comment vous pouvez configurer une zone par défaut:

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" });
Amna Ali
la source
1
excellente question, pourquoi ne pas le créer comme un seul?
stuartdotnet
Qu'est-ce qu'une «zone»? Si je définis une vue, la mise en page référencée est-elle chargée, puis une requête HTTP séparée avec mes données de vue? (c'est-à-dire une opération Ajax séparée) ou la mise en page est-elle rendue et enveloppée autour de ma vue?
Gus Crawford
2
@GusCrawford Qu'est-ce qu'une «zone»? À partir de msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx : pour prendre en charge les grands projets, ASP.NET MVC vous permet de partitionner les applications Web en unités plus petites appelées zones. Les zones permettent de séparer une grande application Web MVC en groupes fonctionnels plus petits. Une zone est en fait une structure MVC à l'intérieur d'une application. Une application peut contenir plusieurs structures MVC (zones).
Amna Ali
Quant à l'autre question, je ne pense pas qu'elle soit liée à cette réponse, et elle ne semble pas pertinente même pour la question initiale. Peut-être que vous devriez le publier ailleurs.
Amna Ali
Je vais demander séparément dans une nouvelle réponse de fil merci pour la perspective.
Gus Crawford
2

Si vous n'avez qu'un seul contrôleur et que vous souhaitez accéder à toutes les actions sur root, vous pouvez ignorer le nom du contrôleur comme celui-ci

routes.MapRoute(
        "Default", 
        "{action}/{id}", 
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);
Manjoor
la source