Использование Html.ActionLink с RouteValues ​​

У меня есть следующий 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
    );
10
задан gdoron is supporting Monica 3 December 2011 в 17:21
поделиться