2011-12-23 10 views
5

Mam domyślny C# MVC tras:C# MVC routing - wiele tras

routes.MapRoute(

    "Default", 

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

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

); 

Teraz będę się adresy URL, takich jak:

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

Ale chciałbym mieć pierwszy zestaw z krótszym url jak:

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

spodziewałem kod, aby być naprawdę proste jak:

routes.MapRoute(

    "Shorturl", 

    "{id}", 

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

); 

routes.MapRoute(

    "Default", 

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

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

); 

Ale to nie działa. Zajmie tylko pierwszą trasę i zapomni o drugiej. Jak ustawić program w pierwszej linii, gdy jest tylko jeden parametr (np. mysite.com/Page1) i podjąć drugą trasę, gdy masz wiele tras (jak mysite.com/Account/Login)?

Edit: mogę zrobić:

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

Ale wtedy musiałbym brzydki "short /" w adresie URL. mogę go naprawić z:

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

Ale wtedy trzeba dodać ręcznie każdą nową stronę ...

+0

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

Odpowiedz

3

Może chcesz spróbować czegoś takiego.

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

    } 

upewnić się, że dodać do trasy przed domyślny (lub nawet usunąć domyślne jeśli chcesz)

Ale kolejność, w jakiej są one dodawane jest ważne.

Brakowało jednego kawałka informacji i akcji w kontrolerze.

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

Mam nadzieję, że to pomoże.

Pozdrawiam.

+0

Dzięki temu aplikacja zapomina o domyślnym routerze dodanym po tym, ponieważ nie może rozróżnić dwóch tras. Ten działa: routes.MapRoute ("Short", "short/{id}", new {controller = "Home", action = "Info", id = "Leermethode"}); ale potem mam brzydki "krótki" w adresie URL. – Paul

+0

Więc grałem z tym trochę, wypróbuj następujące – Sitnam

+0

Więc kiedy już wszystkie strony i trasy zostaną posortowane, możesz dodać swoją zawartość z DB, lub jeśli są to elementy zakodowane, być może wykorzystaj częściowe. Nadzieja To pomaga trochę więcej: $ – Sitnam

Powiązane problemy