w3schools page mvc link htmlattributes another asp.net-mvc actionlink

page - asp.net mvc Html.ActionLink() manteniendo el valor de ruta que no quiero



html.actionlink image (9)

Tengo el siguiente ActionLink en mi vista

<%= Html.ActionLink("LinkText", "Action", "Controller"); %>

y crea la siguiente URL http://mywebsite.com/Controller/Action

Digamos que agrego una identificación al final como así: http://mywebsite.com/Controller/Action/53 y navega a la página. En esta página tengo el marcado que especifiqué arriba. Ahora cuando miro la URL que crea, se ve así:

http://mywebsite.com/Controller/Action/53 (observe la adición de la ID)

Pero quiero que elimine la ID y se vea como lo hizo originalmente, como este http://mywebsite.com/Controller/Action (no hay ID aquí)

¿Alguna idea de cómo puedo solucionar esto? No quiero usar URL codificadas, ya que mi controlador / acciones pueden cambiar.


El problema es que los métodos integrados toman información de la URL en la que se encuentra actualmente, así como de lo que proporciona. Podrías probar esto:

<%= Html.ActionLink("LinkText", "Action", "Controller", new { id = ""}) %>

Eso debería borrar manualmente el parámetro id.


Establecí explícitamente el nombre de la acción como "Acción /". Parece un poco como un hack pero es una solución rápida.

@Html.ActionLink("Link Name", "Action/", "Controller")


La solución es especificar mis propios valores de ruta (el tercer parámetro a continuación)

<%= Html.ActionLink("LinkText", "Action", "Controller", new { id=string.Empty }, null) %>


Las sobrecargas de Html.ActionLink se modifican en las versiones posteriores de MVC. En MVC 5 y superior. Esto es cómo hacer esto:

@Html.ActionLink("LinkText", "Action", "Controller", new { id = "" }, null)

Nota Pasé "" para el parámetro id y nulo para HTMLATTRIBUTES.


Necesitaba los enlaces de mi menú para ser dinámico. En lugar de implementar una gran cantidad de código adicional y enrutamiento para cada página, simplemente prescindí del asistente HTML.

<a href="@(item.websiteBaseURL)/@(item.controller)/@(item.ViewName)">@item.MenuItemName</a>


No sé por qué, pero no funcionó para mí (tal vez debido a Mvc2 RC). Método urlhelper creado =>

public static string WithoutRouteValues(this UrlHelper helper, ActionResult action,params string[] routeValues) { var rv = helper.RequestContext.RouteData.Values; var ignoredValues = rv.Where(x=>routeValues.Any(z => z == x.Key)).ToList(); foreach (var ignoredValue in ignoredValues) rv.Remove(ignoredValue.Key); var res = helper.Action(action); foreach (var ignoredValue in ignoredValues) rv.Add(ignoredValue.Key, ignoredValue.Value); return res; }


Otra forma es usar la sobrecarga ActionLink (HtmlHelper, String, String, RouteValueDictionary), entonces no es necesario poner el valor nulo en el último parámetro

<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>


Parece que necesita registrar una segunda ruta de "Sólo Acción" y usar Html.RouteLink (). Primero registre una ruta como esta en su inicio de aplicación:

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

Entonces en lugar de ActionLink para crear esos enlaces usa:

Html.RouteLink("About","ActionOnly")


Si o bien no sabe qué valores deben anularse explícitamente o simplemente desea evitar la lista adicional de parámetros, puede utilizar un método de extensión como el que se muestra a continuación.

<a href="@Url.Isolate(u => u.Action("View", "Person"))">View</a>

Los detalles de implementación están en esta entrada de blog.