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.