2011-12-12 17 views
16

Vorrei avere il mio URL di base andare a una categoria specifica di un negozio online (un negozio online NopCommerce se questo fa la differenza). L'URL della categoria è: http://myUrl.com/c/6Come impostare una pagina predefinita su un'app MVC?

Dopo aver letto alcuni post tra cui il post di Scott Guthrie about MVC routing ho pensato che avrei potuto semplicemente aggiungere il seguente codice al mio file 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" } 
     ); 
    } 

Ma questo didn sembra funzionare. Come posso realizzare ciò che sto cercando di fare?

Ho poca esperienza con MVC quindi mi scuso se tutto questo non ha senso.

+0

cosa succede con quel codice in atto? guardando il percorso corrente, è necessario disporre di più regole di routing in luogo di quella, in quanto non segue la struttura di denominazione di cui là fuori. hai qualche possibilità di pubblicare l'intera sezione dei percorsi registrati? –

+0

Aggiornato con il metodo RegisterRoutes completo. Quando vado all'URL di base si passa alla stessa pagina che ha fatto prima. –

risposta

13

sguardi come i bit più interessanti sono nel codice sorgente nopCommerce. il percorso predefinito è registrato come

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

ti fondamentalmente desidera registrare il percorso di default, prima il commento //register custom routes. dovrebbe apparire così:

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


} 

il primo percorso potrebbe non essere nemmeno necessario. non ne sono sicuro. mai lavorato con nopcommerce.

0

Hai provato:

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

Prova basta scrivere questo RegisterRoutes metodo

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

    } 

è necessario impostare la pagina predefinita da/Catalogo/Categoria/6

I non capisco perché si scrive questa linea new[] { "Nop.Web.Controllers" }

+1

sta costruendo su un quadro di e-commerce esistente. non può semplicemente rimuovere il codice. c'è molta registrazione del percorso che va dietro le quinte. questo sostanzialmente farebbe funzionare la sua applicazione abbastanza ... –

1

Al fine di evitare eventuali futuri conflitti con aggiornamenti in NopCommerce, quello che vorrei fare è quello di creare un nuovo RouteProvider.cs dentro la mia cartella del tema come questo:

~/Themes/MyTheme/Infrastructure/RouteProvider.cs 

Poi inserire questo codice all'interno:

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; 
     } 
    } 
} 
Problemi correlati