У меня есть следующий HTML-код:
<%: Html.ActionLink(item.ProductName, "Details", "Product", new { item.ProductId }, null)%>
Это отображается как:
<a href="/Product/Details?ProductId=1">My Product Name</a>
Однако, когда я нажимаю на это, я получаю следующую ошибку:
Словарь параметров содержит пустую запись для параметра 'id' из не допускающий значения NULL тип System.Int32 для метода 'System.Web.Mvc.ActionResult Details (Int32)' в 'MyProject.Controllers.ProductController'. Необязательный параметр должен быть ссылочным типом, типом, допускающим значение NULL, или быть объявленным как необязательный параметр.
Имя параметра: parameters
Похоже, что моей маршрутизации не нравится строка запроса «? 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
);