问题
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.
回答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.
回答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" }
回答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;
}
}
}
回答4:
have you tried:
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
"Default", // Route name
"Catalog/Category/6"
);
}
来源:https://stackoverflow.com/questions/8470416/how-to-set-a-default-page-on-an-mvc-app