Tengo el siguiente código HTML:Html.ActionLink con RouteValues
<%: Html.ActionLink(item.ProductName, "Details", "Product", new { item.ProductId }, null)%>
esto es ser traducido como:
<a href="/Product/Details?ProductId=1">My Product Name</a>
Sin embargo, al hacer clic en este, me sale el siguiente error:
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Details(Int32)' in 'MyProject.Controllers.ProductController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters
Parece que a mi enrutamiento no le gusta la cadena de consulta "? ProductId = 1".
Si utilizo en su lugar:
<%: Html.ActionLink(item.ProductName, string.Format("Details/{0}", item.ProductId), "Product", null, null)%>
me sale el siguiente enlace prestados:
<a href="/Product/Details/1">My Product Name</a>
... y esto funciona correctamente cuando se hace clic.
¿Me falta algo básico aquí? Me gustaría utilizar RouteValues, pero no entiendo por qué se lanza este error. ¿Cómo puedo obtener mi método de controlador para aceptar los parámetros de cadena de consulta?
La única asignación de ruta que tengo es:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
O ... si añado un "id =" al parámetro RouteValues: <% = Html.ActionLink (item.ProductName, "Detalles", "productos", nueva {id = item.ProductId}, null)%> Entonces me sale el siguiente enlace: My Product Name ... que también funciona! – seanfitzg
@seanfitzg, tienes razón, pero supongo que no quieres que todos los nombres de los parámetros sean "Id" ... – gdoron