2011-12-23 30 views
5

que tienen un defecto C# rutas mvc:C# MVC enrutamiento - múltiples rutas

routes.MapRoute(

    "Default", 

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

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

); 

Ahora voy a tener URLs como:

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

Pero me gustaría tener el primer set con un menor URL como:

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

que esperaba que el código sea muy simple como:

routes.MapRoute(

    "Shorturl", 

    "{id}", 

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

); 

routes.MapRoute(

    "Default", 

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

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

); 

Pero eso no funciona. Solo tomará la primera ruta y olvidará la segunda. ¿Cómo puedes hacer que tu programa tome la primera ruta cuando solo hay un parámetro (como mysite.com/Page1) y tomar la segunda ruta cuando tienes múltiples rutas (como mysite.com/Account/Login)?

Editar: que puedo hacer:

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

Pero entonces tendría un feo "corto /" en la url. lo puedo arreglar con:

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

Pero luego tenga que añadir manualmente cada nueva página ...

+0

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

Respuesta

3

Es posible que desee probar algo como esto.

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

    } 

asegurarse de que usted agrega esto a la ruta antes del default (o incluso eliminar la acción predeterminada si quieres)

Pero el orden en que éstos se agregan es importante.

Faltaba un bit de información y la Acción dentro del controlador.

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

Espero que esto ayude.

Atentamente.

+0

Con esto, la aplicación olvida el enrutador predeterminado agregado después de esto porque no puede diferenciar entre las 2 rutas. Éste funciona: routes.MapRoute ("Corto", "short/{id}", nuevo {controller = "Home", action = "Info", id = "Leermethode"}); pero luego tengo el feo "corto" en la url. – Paul

+0

Así que jugué un poco con esto, intente lo siguiente – Sitnam

+0

Así que una vez que haya ordenado sus rutas y acciones de páginas, lo que puede hacer es agregar su contenido de la base de datos, o si son elementos codificados, quizás usar parciales. Espero esto ayuda un poco más: $ – Sitnam

Cuestiones relacionadas