ho il seguente codice HTML:Utilizzando Html.ActionLink con RouteValues
<%: Html.ActionLink(item.ProductName, "Details", "Product", new { item.ProductId }, null)%>
questo viene reso come:
<a href="/Product/Details?ProductId=1">My Product Name</a>
Tuttavia, quando si fa clic su questo, ottengo il seguente errore:
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
Sembra che al mio routing non piaccia la stringa di query "? ProductId = 1".
Se uso invece:
<%: Html.ActionLink(item.ProductName, string.Format("Details/{0}", item.ProductId), "Product", null, null)%>
ottengo il seguente link reso:
<a href="/Product/Details/1">My Product Name</a>
... e questo funziona correttamente quando si fa clic.
Mi manca qualcosa di base qui? Mi piacerebbe utilizzare RouteValues, ma non capisco perché questo errore viene generato. Come posso ottenere che il mio metodo Controller accetti i parametri della stringa di query?
L'unica mappatura percorso che ho è:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Oppure ... se posso aggiungere un "id =" al parametro RouteValues: <% = Html.ActionLink (item.ProductName, "Dettagli", "prodotto", nuova {id = item.ProductId}, null)%> Poi ho il seguente link: My Product Name ... che funziona anche! – seanfitzg
@seanfitzg, hai ragione, ma suppongo che tu non voglia che tutti i nomi dei tuoi parametri siano "Id" ... – gdoron