Tôi có Html sau:Sử dụng Html.ActionLink với RouteValues
<%: Html.ActionLink(item.ProductName, "Details", "Product", new { item.ProductId }, null)%>
này đã được render thành:
<a href="/Product/Details?ProductId=1">My Product Name</a>
Tuy nhiên, khi tôi bấm vào đây, tôi nhận được lỗi sau:
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
Dường như định tuyến của tôi không giống chuỗi truy vấn "? ProductId = 1".
Nếu tôi sử dụng thay vì:
<%: Html.ActionLink(item.ProductName, string.Format("Details/{0}", item.ProductId), "Product", null, null)%>
tôi nhận được đường dẫn sau hiển thị:
<a href="/Product/Details/1">My Product Name</a>
... và các công trình này một cách chính xác khi nhấp vào.
Tôi có thiếu cái gì cơ bản ở đây không? Tôi muốn sử dụng RouteValues, nhưng tôi không hiểu tại sao lỗi này lại bị ném. Làm thế nào tôi có thể nhận được phương pháp điều khiển của tôi để chấp nhận các tham số chuỗi truy vấn?
Việc lập bản đồ đường duy nhất tôi có là:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Hoặc ... nếu tôi thêm "id =" vào thông số RouteValues: <% = Html.ActionLink (item.ProductName, "Chi tiết", "Sản phẩm", mới {id = item.ProductId}, null)%> Sau đó, tôi nhận được liên kết sau: My Product Name ... cũng hoạt động! – seanfitzg
@seanfitzg, bạn nói đúng, nhưng tôi đoán bạn không muốn tất cả tên tham số của bạn là "Id" ... – gdoron