Définir «Page d'accueil» dans Asp.Net MVC

105

Dans asp.net MVC, la "page d'accueil" (c'est-à-dire l'itinéraire qui s'affiche lorsque vous frappez sur www.foo.com) est définie sur Accueil / Index.

  • Où cette valeur est-elle stockée?
  • Comment puis-je changer la "page d'accueil"?
  • Y a-t-il quelque chose de plus élégant que d'utiliser RedirectToRoute () dans l'action Index du contrôleur domestique?

J'ai essayé de grepping pour Home / Index dans mon projet et je n'ai pas pu trouver de référence, ni rien voir dans IIS (6). J'ai regardé la page default.aspx à la racine, mais cela ne semblait rien faire de pertinent.

Merci

NikolaiDante
la source

Réponses:

150

Regardez le Default.aspx/Default.aspx.cset le Global.asax.cs

Vous pouvez configurer un itinéraire par défaut:

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

Changez simplement les noms des contrôleurs / actions par défaut. Cela devrait être la dernière route de la table de routage.

Michael Stum
la source
6
@NikolaiDante, vous devriez faire de ce commentaire une réponse car je l'ai presque raté et c'est plus rapide que cette réponse. :) Merci
GazB
3
Dans MVC 5. si vous avez une connexion par formulaire, lorsque vous cliquez sur Connexion sur la page d'accueil, il redirigera toujours vers le contrôleur Home, et non vers votre contrôleur personnalisé spécifié dans l'itinéraire. L'action d'enregistrement fera la même chose. Donc, en plus de changer routeconfig, vous devez également changer du code lors de l'appel de RedirectionToAction ("Index", "Home") et le remplacer par vos propres noms de contrôleur et d'action.
anIBMer
Il convient de souligner que vous pouvez avoir plusieurs itinéraires . Cela peut être votre valeur par défaut avec les paramètres d'URL BLANK, mais vous voulez probablement une deuxième route comme url: "{controller}/{action}/{id}". Donnez simplement des noms différents aux itinéraires.
Jess
Cette réponse peut fonctionner pour vous, mais si vous avez besoin de plusieurs itinéraires, voir ici stackoverflow.com/a/8470531/1804678
Jess
1
Cette réponse ne convient que pour MVC 3 et versions antérieures. Voir ma réponse ci-dessous pour l'approche recommandée MVC 4 et versions ultérieures.
JTW
19

ASP.NET Core

Le routage est configuré dans la Configureméthode de la Startupclasse. Pour définir la "page d'accueil", ajoutez simplement ce qui suit. Cela entraînera le routage des utilisateurs vers le contrôleur et l'action définie dans la méthode MapRoute quand / s'ils naviguent vers l'URL de base de votre site, c'est-à-dire que yoursite.com dirigera les utilisateurs vers yoursite.com/foo/index:

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

Pre-ASP.NET Core

Utilisez la méthode RegisterRoutes située dans App_Start / RouteConfig.cs (MVC 3 et 4) ou Global.asax.cs (MVC 1 et 2) comme indiqué ci-dessous. Cela entraînera le routage des utilisateurs vers le contrôleur et l'action définis dans la méthode MapRoute s'ils naviguent vers l'URL de base de votre site, c'est-à-dire que yoursite.com dirigera l'utilisateur vers 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
la source
5

Étape 1: Cliquez sur Fichier Global.asax dans votre solution.

Étape 2: Passez ensuite à la définition de

RouteConfig.RegisterRoutes(RouteTable.Routes);

Étape 3: Changer le nom du contrôleur et le nom de la vue

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
la source
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
la source
3

vérifiez la méthode RegisterRoutes dans global.asax.cs - c'est l'emplacement par défaut pour la configuration de l'itinéraire ...

Michał Chaniewski
la source
2

Routage d'attributs dans MVC 5

Avant MVC 5, vous pouviez mapper des URL à des actions et des contrôleurs spécifiques en appelant routes.MapRoute(...)le fichier RouteConfig.cs. C'est là que l'url de la page d'accueil est stockée ( Home/Index). Cependant, si vous modifiez l'itinéraire par défaut comme indiqué ci-dessous,

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

gardez à l'esprit que cela affectera les URL d'autres actions et contrôleurs. Par exemple, si vous aviez une classe de contrôleur nommée ExampleControlleret une méthode d'action à l'intérieur de celle-ci appelée DoSomething, alors l'URL par défaut attendue ExampleController/DoSomethingne fonctionnera plus car la route par défaut a été modifiée.

Une solution de contournement pour cela est de ne pas jouer avec la route par défaut et de créer de nouvelles routes dans le fichier RouteConfig.cs pour d'autres actions et contrôleurs comme ceci,

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

Maintenant, l' DoSomethingaction de la ExampleControllerclasse sera mappée à l'url hey/now. Mais cela peut devenir fastidieux à faire chaque fois que vous souhaitez définir des itinéraires pour différentes actions. Ainsi, dans MVC 5, vous pouvez maintenant ajouter des attributs pour faire correspondre les URL aux actions comme ceci,

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
la source
1

J'ai essayé la réponse mais cela n'a pas fonctionné pour moi. C'est ce que j'ai fini par faire:

Créez un nouveau contrôleur DefaultController. Dans l'action d'index, j'ai écrit une redirection de ligne:

return Redirect("~/Default.aspx")

Dans RouteConfig.cs, changez controller = "Default" pour la route.

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
        );
vickey1611
la source
vous avez probablement oublié d'omettre le mot "Controller" dans le nom du contrôleur, créant la route par défaut
amarax
0

Si vous ne souhaitez pas changer de routeur, accédez simplement au HomeController et modifiez MyNewViewHere dans l'index comme ceci:

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