2011-12-23 19 views
5

Ho un difetto C# itinerari MVC:C# MVC di routing - percorsi multipli

routes.MapRoute(

    "Default", 

    "{controller}/{action}/{id}" 

    new { controller = "Home", action = "Index", id = "Welcome" } 

); 

Ora mi metterò URL del tipo:

mysite.com/Home/Index/Page1 
mysite.com/Home/Index/Page2 
mysite.com/Home/Index/Page3 
mysite.com/Account/Login 
mysite.com/Account/Etc 

Ma mi piacerebbe avere il primo set con una più breve url del tipo:

mysite.com/Page1 
mysite.com/Page2 
mysite.com/Page3 
mysite.com/Account/Login 
mysite.com/Account/Etc 

mi aspettavo il codice per essere veramente semplice come:

routes.MapRoute(

    "Shorturl", 

    "{id}", 

    new { controller = "Home", action = "Index", id = "Welcome" } 

); 

routes.MapRoute(

    "Default", 

    "{controller}/{action}/{id}" 

    new { controller = "Home", action = "Index", id = "Welcome" } 

); 

Ma questo non funziona. Prenderà solo la prima via e dimenticherà la seconda. Come puoi fare in modo che il tuo programma esegua il primo percorso quando c'è un solo parametro (come mysite.com/Page1) e prendi il secondo percorso quando hai più percorsi (come mysite.com/Account/Login)?

Edit: posso fare:

routes.MapRoute("Short", "short/{id}", new { controller = "Home", action = "Indx", id = "Page1" }); 

Ma allora avrei una brutta "corto /" nell'URL. posso risolvere il problema con:

routes.MapRoute("Page1", "Page1", new { controller = "Home", action = "Index", id = "Page1" }); 

Ma poi ho bisogno di aggiungere ogni nuova pagina manualmente ...

+0

http://stackoverflow.com/questions/2975642/routing-in-asp-net-mvc-2-0 – CodeCaster

risposta

3

si potrebbe desiderare di provare qualcosa di simile.

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Short", // Route name 
      "{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

    } 

assicurarsi che si aggiunge questo al percorso prima del default (o anche rimuovere il default se si desidera)

Ma l'ordine in cui questi si aggiungono è importante.

Mancava un po 'di informazioni e l'azione all'interno del controller.

public ActionResult Index(string id) 
{ 
     ViewBag.Message = "Welcome to ASP.NET MVC!"+id; 
     return View(); 
} 

Spero che questo aiuti.

Saluti.

+0

Con questo l'app dimentica il router predefinito aggiunto dopo questo perché non può distinguere tra i 2 percorsi. Questo funziona: routes.MapRoute ("Short", "short/{id}", new {controller = "Home", action = "Info", id = "Leermethode"}); ma poi ho il brutto "corto" nell'URL. – Paul

+0

Quindi ho giocato un po 'con questo, prova il seguente – Sitnam

+0

Quindi, una volta che le tue pagine e le tue azioni sono state ordinate, ciò che puoi fare è aggiungere il tuo contenuto dal DB, o se sono elementi codificati, magari usare partial. Spero che questo aiuti un po 'di più: $ – Sitnam

Problemi correlati