У меня есть следующий Html:
<%: Html.ActionLink(item.ProductName, "Details", "Product", new { item.ProductId }, null)%>
Это отображается как:
<a href="/Product/Details?ProductId=1">My Product Name</a>
Однако, когда я нажимаю на это, я получаю следующую ошибку:
Словарь параметров содержит нулевую запись для параметра 'id' of non-nullable тип 'System.Int32' для метода 'System.Web.Mvc.ActionResult Details (Int32)' в 'MyProject.Controllers.ProductController. Необязательный параметр должен быть ссылочным типом, нулевым типом или быть объявлен как необязательный параметр.
Имя параметра: параметры
Похоже, что моя маршрутизация не похожа на строку запроса "? ProductId = 1".
Если я использую вместо этого:
<%: Html.ActionLink(item.ProductName, string.Format("Details/{0}", item.ProductId), "Product", null, null)%>
Я получаю следующую ссылку:
<a href="/Product/Details/1">My Product Name</a>
... и это работает правильно при нажатии.
Я пропустил что-то основное здесь? Я хотел бы использовать RouteValues, но я не понимаю, почему эта ошибка возникает. Как я могу заставить мой метод контроллера принимать параметры строки запроса?
Единственное отображение маршрута, которое у меня есть:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);