asp.net mvc - parametros - Uso de Html.ActionLink para llamar a la acción en diferentes controladores
enviar parametros por url action (8)
Estoy tratando de navegar entre los controladores utilizando ActionLink
. Voy a contar mi problema con un ejemplo.
Estoy en la vista de índice del controlador Hat, y estoy tratando de usar el siguiente código para crear un enlace a la acción Detalles del controlador del producto.
<%= Html.ActionLink("Details", "Details", "Product", new { id=item.ID }) %>
En lugar de crear un enlace a Detalles en el controlador del producto, esto genera un enlace a la acción Detalles en el controlador de Hat y agrega un parámetro de Longitud al final:
Hat/Details/9?Length=7
No puedo usar HTML.ActionLink
para cambiar entre los controladores debido a este problema. Apreciaré si me puede indicar lo que estoy haciendo mal. Gracias
PD: estoy usando la configuración de ruta predeterminada que viene con MVC
routes.MapRoute("Default", "{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" } );
Con esos parámetros estás activando la función / método sobrecargado incorrecto.
Lo que funcionó para mí:
<%= Html.ActionLink("Details", "Details", "Product", new { id=item.ID }, null) %>
Se activa HtmlHelper.ActionLink (string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)
Estoy usando MVC 4.
Cheerio!
Estás golpeando mal la sobrecarga de ActionLink. Intenta esto en su lugar.
<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>
Este código funcionó para mí en una vista parcial:
<a href="/Content/[email protected]">@item.Title</a>
Lo que quieres es esta sobrecarga:
//linkText, actionName, controllerName, routeValues, htmlAttributes
<%=Html.ActionLink("Details", "Details",
"Product", new {id = item.ID}, null) %>
Recomendaría escribir estos ayudantes usando parámetros con nombre para mayor claridad de la siguiente manera:
@Html.ActionLink(
linkText: "Details",
actionName: "Details",
controllerName: "Product",
routeValues: new {
id = item.ID
},
htmlAttributes: null
)
Si toma el ensamblaje de futuros de MVC (que recomendaría encarecidamente), puede utilizar un genérico al crear el ActionLink y un lambda para construir la ruta:
<%=Html.ActionLink<Product>(c => c.Action( o.Value ), "Details" ) %>
Puede obtener el conjunto de futuros aquí: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471
Una solución alternativa sería usar el objeto de ayuda Url
para establecer el atributo href
de una etiqueta <a>
como:
<a href="@Url.Action("Details", "Product",new { id=item.ID }) )">Details</a>
inténtalo está funcionando bien
<%:Html.ActionLink("Details","Details","Product", new {id=item.dateID },null)%>