106 votes

Définir la "page d'accueil" dans Asp.Net MVC

Dans asp.net MVC, la "page d'accueil" (c'est-à-dire la route qui s'affiche lorsque l'on clique sur www.foo.com) est définie sur Home/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 d'accueil ?

J'ai essayé de rechercher Home/Index dans mon projet et je n'ai pas trouvé de référence, et je n'ai rien pu voir dans IIS (6). J'ai regardé la page default.aspx dans la racine, mais cela ne semble pas faire quelque chose de pertinent.

Merci

3voto

Chris Gong Points 4756

Acheminement des attributs dans MVC 5

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

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

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

Une solution de contournement consiste à ne pas toucher à la route par défaut et à créer de nouvelles routes dans le fichier RouteConfig.cs pour d'autres actions et contrôleurs, comme suit,

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, le DoSomething l'action de la ExampleController sera mis en correspondance avec l'url hey/now . Mais cela peut devenir fastidieux à faire à chaque fois que vous voulez définir des routes pour différentes actions. Ainsi, dans MVC 5, vous pouvez maintenant ajouter des attributs pour faire correspondre les urls aux actions, comme suit,

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

1voto

Jidheesh Rajan Points 374
  1. Allez dans les propriétés du projet
  2. Allez dans l'onglet Web
  3. Sélectionnez le bouton radio Page spécifique
  4. Supprimer l'url dans la zone de texte Page spécifique
  5. Onglet Enregistrer les propriétés.

1voto

vickey1611 Points 79

J'ai essayé la réponse mais ça n'a pas marché pour moi. Voici ce que j'ai fini par faire :

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

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

0voto

Martin Kei Points 1

Si vous ne voulez pas changer le routeur, il suffit d'aller dans le HomeController et changez MyNewViewHere dans l'index comme ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X