routeconfig route net mvc attribute asp asp.net-mvc routing

route - Enrutamiento ASP.NET MVC



route controller mvc 5 (4)

Hasta ahora he podido usar el enrutamiento predeterminado que viene con ASP.NET MVC. Desafortunadamente, ahora que me estoy ramificando en rutas más complejas, estoy luchando para entender cómo hacer que esto funcione.

Un ejemplo simple que intento obtener es que la ruta / Usuario / {ID de usuario} / Elementos se asigne a la función Elementos del controlador de usuario. ¿Alguien puede decirme qué estoy haciendo mal con mi ruta aquí?

routes.MapRoute("UserItems", "User/{UserID}/Items", new {controller = "User", action = "Items"});

Y en mi página aspx

Html.ActionLink("Items", "UserItems", new { UserID = 1 })


¿Puedes publicar más información? ¿Qué URL es la página aspx generando en el enlace? Podría deberse al orden de la definición de tu ruta. Creo que necesita que su ruta sea declarada antes de la ruta predeterminada.


Pasando por el código MVC Vista previa 4 Tengo frente a mí la sobrecarga de Html.ActionLink () que está utilizando es esta:

public string ActionLink(string linkText, string actionName, object values);

Tenga en cuenta cómo el segundo parámetro es el nombre de acción no el nombre de ruta .

Como tal, intente:

Html.ActionLink("Items", "Items", new { UserID = 1 })

Alternativamente, intente:

<a href="<%=Url.RouteUrl("UserItems", new { UserId = 1 })%>">Items</a>


Primero, comience por ver qué URL genera y compruébelo con la biblioteca de depuración de rutas de Phil Haack . Despejará muchas cosas.

Si tiene varias rutas, puede considerar nombrar sus rutas y usar enrutamiento con nombre. Esto hará que su intención sea más clara cuando vuelva a visitar su código y potencialmente puede mejorar la velocidad de análisis.

Además (y esto es puramente una opinión personal) me gusta generar mis enlaces en algún lugar al comienzo de la página en cadenas y luego poner esas cadenas en mi HTML. Es una pequeña sobrecarga pero hace que el código sea mucho más legible en mi opinión. Además, si tiene enlaces repetidos, debe generarlos solo una vez.

Prefiero poner

<% string action = Url.RouteUrl("NamedRoute", new { controller="User", action="Items", UserID=1});%>

y luego escribir

<a href="<%=action%>">link</a>


Html.ActionLink("Items", "User", new { UserID = 1 })