2011-12-12 12 views
16

Chciałbym, aby mój podstawowy adres URL trafił do konkretnej kategorii sklepu internetowego (sklepu online NopCommerce, jeśli to robi różnicę). Adres URL kategorii to: http://myUrl.com/c/6Jak ustawić stronę domyślną w aplikacji MVC?

Po przeczytaniu kilku postów w tym Scott Gutherie Post about MVC routing Myślałem, że mogę tylko 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 didn wydaje się działać. 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.

+0

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? –

+0

Zaktualizowana za pomocą pełnej metody RegisterRoutes. Kiedy wchodzę do podstawowego adresu URL, przechodzi on na tę samą stronę, co wcześniej. –

Odpowiedz

13

wygląda jak najciekawsze bity w kodzie źródłowym nopcommerce. Trasa domyślna jest zarejestrowany jako

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

będziesz zasadzie chcesz zarejestrować swoją pierwszą trasę domyślną, przed komentarzem //register custom routes. 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ć konieczna. Nie jestem pewny. nigdy nie działał z nopcommerce.

0

próbowałeś:

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

Spróbuj po prostu napisz to w 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 
     ); 

    } 

to musi ustawić domyślną stronę z/Katalog/kategoria/6

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

+1

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 ... –

1

W celu uniknięcia przyszłych konfliktów z aktualizacji w nopCommerce, co chciałbym zrobić, to stworzyć nowe RouteProvider.cs wewnątrz moim folderze z szablonem jak to:

~/Themes/MyTheme/Infrastructure/RouteProvider.cs 

Następnie umieścić ten kod wewnątrz:

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; 
     } 
    } 
} 
Powiązane problemy