Pytanie Jak ustawić stronę domyślną w aplikacji MVC?


Chciałbym, aby mój podstawowy adres URL trafił do konkretnej kategorii sklepu internetowego (a NopCommerce sklep internetowy, jeśli to robi różnicę). Adres URL kategorii to: http://myUrl.com/c/6

Po przeczytaniu kilku postów, w tym postu Scotta Gutherie o routingu MVC Pomyślałem, że mogę dodać następujący kod do mojego pliku 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" }
        );
    }

Ale to nie działało. Jak mogę osiągnąć to, co próbuję zrobić?

Mam małe doświadczenie z MVC, więc przepraszam, jeśli coś z tego nie ma sensu.


18
2017-12-12 05:51


pochodzenie


co dzieje się z tym kodem? patrząc na aktualną trasę, musisz mieć więcej reguł trasowania niż ta, ponieważ nie jest ona zgodna ze strukturą nazewnictwa. Czy jest szansa, że ​​mógłbyś opublikować całą sekcję tras rejestracyjnych? - nathan gonzalez
Zaktualizowano pełną metodą RegisterRoutes. Kiedy wchodzę do podstawowego adresu URL, przechodzi on na tę samą stronę, co wcześniej. - Abe Miessler


Odpowiedzi:


wygląda na to, że najciekawsze bity znajdują się w kodzie źródłowym nopcommerce. trasa domyślna jest zarejestrowana jako

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

zasadniczo musisz najpierw zarejestrować swoją domyślną trasę, przed //register custom routes komentarz. powinien wyglądać tak:

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


}

pierwsza trasa może nie być nawet konieczna. Nie jestem pewny. nigdy nie działał z nopcommerce.


13
2017-12-12 06:10





Spróbuj po prostu napisz to RegisterRoutes metoda

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

    }

musi ustawić domyślną stronę z katalogu / Catalog / Category / 6

Nie rozumiem, dlaczego piszesz tę linię new[] { "Nop.Web.Controllers" }


1
2017-12-12 06:08



on opiera się na istniejącej strukturze e-commerce. nie może po prostu usunąć kodu. Rejestracja wielu tras odbywa się za kulisami. to w zasadzie spowodowałoby, że jego aplikacja całkiem działa ... - nathan gonzalez


Aby uniknąć przyszłych konfliktów z aktualizacjami w NopCommerce, chciałbym utworzyć nowy folder RouteProvider.cs wewnątrz mojego folderu tematycznego:

~/Themes/MyTheme/Infrastructure/RouteProvider.cs

Następnie włóż ten kod do środka:

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
2017-10-03 10:23





czy próbowałeś:

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

0
2017-12-12 06:08