web-dev-qa-db-fra.com

Comment définir une page par défaut sur une application MVC?

J'aimerais que mon URL de base soit dirigée vers une catégorie spécifique d'un magasin en ligne (un NopCommerce magasin en ligne si cela fait une différence). L'URL de la catégorie est: http://myUrl.com/c/6

Après avoir lu quelques articles, dont celui de Scott Gutherie sur le routage MVC , je pensais pouvoir ajouter le code suivant à mon fichier Global.ascx.cs:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        //register custom routes (plugins, etc)
        var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>();
        routePublisher.RegisterRoutes(routes);

        routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Catalog", action = "Category", id = 6 },
                new[] { "Nop.Web.Controllers" }
        );
    }

Mais cela n'a pas semblé fonctionner. Comment puis-je accomplir ce que j'essaie de faire?

J'ai peu d'expérience avec MVC, donc je m'excuse si cela n'a aucun sens.

18
Abe Miessler

semble que les bits les plus intéressants se trouvent dans le code source de nopcommerce. la route par défaut est enregistrée comme 

    routes.MapLocalizedRoute("HomePage",
                    "",
                    new { controller = "Home", action = "Index"},
                    new[] { "Nop.Web.Controllers" });

vous voudrez en principe enregistrer votre itinéraire par défaut en premier, avant le commentaire //register custom routes. devrait ressembler à ceci:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Catalog", action = "Category", id = 6 },
            new[] { "Nop.Web.Controllers" }
    );

    routes.MapRoute(
        "CustomHome", // Route name
        "", // URL with parameters
        new { controller = "Catalog", action = "Category", id = 6 },
        new[] { "Nop.Web.Controllers" }
    );

    //register custom routes (plugins, etc)
    var routePublisher = EngineContext.Current.Resolve<IRoutePublisher>();
    routePublisher.RegisterRoutes(routes);


}

le premier itinéraire peut même ne pas être nécessaire. je ne suis pas sûr. jamais travaillé avec nopcommerce.

13
nathan gonzalez

Afin d'éviter tout conflit futur avec les mises à jour dans NopCommerce, je voudrais créer un nouveau fichier RouteProvider.cs dans mon dossier de thèmes, comme suit: 

~/Themes/MyTheme/Infrastructure/RouteProvider.cs

Ensuite, mettez ce code à l'intérieur:

namespace Nop.Web.Themes.MyTheme.Infrastructure
{
public class RouteProvider : IRouteProvider
{
    public void RegisterRoutes(RouteCollection routes)
    {
        routes.MapLocalizedRoute("CustomHome",
                        "",
                        new { controller = "Catalog", action = "Category", Id = 6 },
                        new[] { "Nop.Web.Controllers" });

    }

    public int Priority
    {
        get
        {
            return 10;
        }
    }
}
1

Essayez d'écrire ceci dans RegisterRoutes method

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Catalog", action = "Category", id = 6 } // Parameter defaults
        );

    }

il faut définir votre page par défaut à partir de/Catalogue/Catégorie/6

Je ne comprends pas pourquoi vous écrivez cette ligne new[] { "Nop.Web.Controllers" }

1
Artur Keyan

as-tu essayé: 

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute(
            "Default", // Route name
            "Catalog/Category/6"
    );
}
0
AceMark