web-dev-qa-db-fra.com

Définissez "Homepage" dans Asp.Net MVC

Dans asp.net MVC, la "page d'accueil" (c'est-à-dire l'itinéraire qui s'affiche lorsque vous accédez à 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 at-il quelque chose de plus élégant que d’utiliser RedirectToRoute () dans l’action Index du contrôleur domestique?

J'ai essayé grepping pour Home/Index dans mon projet et je ne pouvais trouver aucune référence. Je ne pouvais rien voir dans IIS (6). J'ai consulté la page default.aspx à la racine, mais cela ne semble rien faire de pertinent.

Merci

101
NikolaiDante

Regarde le Default.aspx/Default.aspx.cs et le fichier 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
        );

Il suffit de changer les noms de contrôleur/action sur la valeur par défaut souhaitée. Cela devrait être le dernier itinéraire de la table de routage.

147
Michael Stum

ASP.NET Core

Le routage est configuré dans la méthode Configure de la classe Startup. Pour définir la "page d'accueil", ajoutez simplement ce qui suit. Ainsi, les utilisateurs seront routés vers le contrôleur et l'action définie dans la méthode MapRoute lorsqu'ils/accéderont à l'URL de base de votre site, c'est-à-dire que votre site.com dirigera les utilisateurs vers votre site.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. Ainsi, les utilisateurs seront routés vers le contrôleur et l’action définie dans la méthode MapRoute s’ils accèdent à l’URL de base de votre site. En d’autres termes, votre site.com le dirigera vers votre site.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 }
    );
}
16
JTW

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

Étape 2: Ensuite, passez à la définition de

RouteConfig.RegisterRoutes(RouteTable.Routes);

Étape 3: Modifier 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 }
                        );
    }
}
4
Ankur Shah
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 }
        );
    }
}
4
Niraj

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

3
Michał Chaniewski

Routage d'attributs dans MVC 5

Avant MVC 5, vous pouviez mapper des URL sur des actions et des contrôleurs spécifiques en appelant routes.MapRoute(...) dans le fichier RouteConfig.cs. C’est ici que l’URL de la page d’accueil est stocké (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 }
);

gardez à l'esprit que cela affectera les URL d'autres actions et contrôleurs. Par exemple, si vous avez une classe de contrôleur nommée ExampleController et une méthode d'action à l'intérieur de celle-ci appelée DoSomething, 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 manipuler la route par défaut et à créer de nouvelles routes dans le fichier RouteConfig.cs pour d’autres actions et contrôleurs, par exemple,

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'action DoSomething de la classe ExampleController sera mappée à l'URL hey/now. Mais cela peut devenir fastidieux à chaque fois que vous souhaitez définir des itinéraires pour différentes actions. Donc, dans MVC 5, vous pouvez maintenant ajouter des attributs pour faire correspondre les URL à des actions comme celle-ci,

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

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. En action index, j'ai écrit une redirection de ligne:

return Redirect("~/Default.aspx")

Dans RouteConfig.cs, changez le contrôleur = "Par défaut" pour la route.

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

Si vous ne voulez pas changer de routeur, allez simplement dans le HomeController et changez MyNewViewHere dans l'index comme ceci:

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