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.

¿Fue útil?

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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top