I would like to have my base URL go to a specific category of an online store (a NopCommerce online store if that makes a difference). The URL of the category is: http://myUrl.com/c/6
After reading a few posts including Scott Gutherie’s post about MVC routing I thought I could just add the following code to my Global.ascx.cs file:
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" }
);
}
But this didn’t seem to work. How can I accomplish what I am trying to do?
I have little experience with MVC so I apologize if any of this does not make sense.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
looks like the most interesting bits are in the nopcommerce source code. the default route is registered as
routes.MapLocalizedRoute("HomePage",
"",
new { controller = "Home", action = "Index"},
new[] { "Nop.Web.Controllers" });
you’ll basically want to register your default route first, before the //register custom routes comment. should end up looking like this:
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);
}
the first route may not even be necessary. i’m not sure. never worked with nopcommerce.
Method 2
Try just write this in 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
);
}
it is must set your default page from /Catalog/Category/6
I don’t understand why you write this line new[] { "Nop.Web.Controllers" }
Method 3
In order to avoid any future conflicts with updates in NopCommerce, what I would do is to create a new RouteProvider.cs inside my theme folder as this:
~/Themes/MyTheme/Infrastructure/RouteProvider.cs
Then put this code inside:
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;
}
}
}
Method 4
have you tried:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
"Default", // Route name
"Catalog/Category/6"
);
}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0