asp.net mvc Html.ActionLink () manteniendo el valor ruta no quiero
-
13-09-2019 - |
Pregunta
Tengo el siguiente ActionLink en mi opinión
<%= Html.ActionLink("LinkText", "Action", "Controller"); %>
y crea la siguiente URL http://mywebsite.com/Controller/Action
Digamos que añadir un ID al final de esta forma: http://mywebsite.com/Controller/Action / 53 y vaya a la página. En esta página Tengo el marcado he especificado anteriormente. Ahora, cuando miro en la dirección URL que crea que tiene este aspecto:
http://mywebsite.com/Controller/Action/53 (nótese la adición de el ID)
Pero lo quiero para eliminar el ID y vea como lo hizo originalmente, como este http://mywebsite.com / controlador / Acción (notará ninguna ID aquí)
¿Alguna idea de cómo puedo solucionar este problema? No quiero usar URL codificadas desde mi controlador / acciones puede cambiar.
Solución
La solución es especificar mis propios valores de ruta (el tercer parámetro más adelante)
<%= Html.ActionLink("LinkText", "Action", "Controller",
new { id=string.Empty }, null) %>
Otros consejos
Parece que usted tiene que registrarse una segunda "Sólo Acción" ruta y utilizar Html.RouteLink (). En primer lugar registrar una ruta como esta en que la aplicación arranque:
routes.MapRoute("ActionOnly", "{controller}/{action}",
new { controller = "Home", action = "Index" } );
A continuación, en lugar de ActionLink para crear esos vínculos utilizar:
Html.RouteLink("About","ActionOnly")
El problema es el construido en los métodos de obtener información de la URL que se encuentra actualmente, así como lo que usted provee. Usted podría intentar esto:
<%= Html.ActionLink("LinkText", "Action", "Controller", new { id = ""}) %>
Esto debería eliminar manualmente el parámetro id.
No sabe por qué, pero no funcionó para mí (tal vez debido a MVC2 RC). Creado UrlHelper method =>
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;
}
Si bien no se sabe qué valores tiene que ser anulado de forma explícita o simplemente quiere evitar la lista adicional de parámetros que puede utilizar un método de extensión como lo de abajo.
<a href="@Url.Isolate(u => u.Action("View", "Person"))">View</a>
Los detalles de implementación son href="http://blog.greatrexpectations.com/?p=622" en esta entrada del blog
Me establecer explícitamente el nombre de la acción como "Acción /". Parece un poco como un truco, pero es una solución rápida.
@Html.ActionLink("Link Name", "Action/", "Controller")
Otra forma es utilizar ActionLink (HtmlHelper, String, String, RouteValueDictionary) de sobrecarga, entonces no hay necesidad de poner nulo en el último parámetro
<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>
Las sobrecargas de Html.ActionLink se cambian en las versiones posteriores de MVC. En MVC 5 y superiores. Se trata de cómo hacer esto:
@Html.ActionLink("LinkText", "Action", "Controller", new { id = "" }, null)
Tenga en cuenta que pasé "" para el parámetro id y nulo para htmlAttributes.
que necesitaba mis enlaces del menú a ser dinámico. En lugar de implementar una gran cantidad de código extra y enrutamiento para cada sola página sencilla que prescindido de la asistente de HTML.
<a href="@(item.websiteBaseURL)/@(item.controller)/@(item.ViewName)">@item.MenuItemName</a>