2011-12-23 4 views
5

У меня есть по умолчанию C# MVC маршруты:C# MVC маршрутизации - несколько маршрутов

routes.MapRoute(

    "Default", 

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

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

); 

Теперь я получить URLs как:

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

Но я хотел бы иметь первый сет с более коротким URL, как:

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

Я ожидал, что код будет очень простым, как:

routes.MapRoute(

    "Shorturl", 

    "{id}", 

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

); 

routes.MapRoute(

    "Default", 

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

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

); 

Но это не работает. Это займет только первый маршрут и забудет второй. Как вы можете сделать свою программу первым маршрутом, когда есть только один параметр (например, mysite.com/Page1) и взять второй маршрут, когда у вас несколько маршрутов (например, mysite.com/Account/Login)?

Edit: я могу сделать:

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

Но тогда я бы уродливый "короткий /" в URL. я могу это исправить с:

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

Но тогда мне нужно добавить каждую новую страницу вручную ...

+0

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

ответ

3

Вы можете попробовать что-то вроде этого.

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

    } 

убедитесь, что вы добавите это маршрут до дефолта (или даже удалить значение по умолчанию, если вы хотите)

Но порядок, в котором они добавляются важно.

Был недостаток информации, и что действие внутри контроллера.

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

Надеюсь, это поможет.

С уважением.

+0

При этом приложение забывает маршрутизатор по умолчанию, добавленный после этого, потому что он не может различать два маршрута. Это работает: routes.MapRoute («Short», «short/{id}», new {controller = «Home», action = «Info», id = «Leermethode»}); но тогда у меня есть уродливый «короткий» в URL. – Paul

+0

Итак, я немного поиграл с этим, попробуйте следующее: – Sitnam

+0

Итак, как только вы определили маршруты и действия своих страниц, все, что вы можете сделать, это добавить свой контент из БД или, если они являются жестко закодированными элементами, возможно, использовать частичные. Надежда Это помогает немного больше: $ – Sitnam

Смежные вопросы