Mam następujące HTML:Korzystanie Html.ActionLink z RouteValues
<%: Html.ActionLink(item.ProductName, "Details", "Product", new { item.ProductId }, null)%>
ten jest wyświetlany jako:
<a href="/Product/Details?ProductId=1">My Product Name</a>
Jednak, gdy klikam na to, pojawia się następujący błąd:
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
Wygląda na to, że mój routing nie odpowiada ciągowi zapytania "? ProductId = 1".
Jeśli użyję zamiast:
<%: Html.ActionLink(item.ProductName, string.Format("Details/{0}", item.ProductId), "Product", null, null)%>
otrzymuję poniższy link renderowany:
<a href="/Product/Details/1">My Product Name</a>
... i to działa poprawnie po kliknięciu.
Czy brakuje tu czegoś podstawowego? Chciałbym użyć RouteValues, ale nie rozumiem, dlaczego ten błąd jest zgłaszany. Jak mogę przekonać się, że moja metoda kontrolera akceptuje parametry ciągu zapytania?
Jedynym wyznaczania tras mam to:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Lub ... jeśli dodaję "id =" do parametru RouteValues: <% = Html.ActionLink (item.ProductName, "Details", "Product", new {id = item.ProductId}, null)%> Następnie pojawia się następujący link: My Product Name ... który również działa! – seanfitzg
@seanfitzg, masz rację, ale myślę, że nie chcesz, aby wszystkie twoje parametry były "Id" ... – gdoron