Ваша маршрутизация должна быть настроена вроде {controller}/{action}/{firstItem}
. Если Вы оставили маршрутизацию как значение по умолчанию {controller}/{action}/{id}
в Вашем global.asax.cs
файл, то необходимо будет передать в id
.
routes.MapRoute(
"Inventory",
"Inventory/{action}/{firstItem}",
new { controller = "Inventory", action = "ListAll", firstItem = "" }
);
... или что-то близко к этому.
Для перефразирования ответ Jarret Meyer необходимо изменить название параметра к 'идентификатору' или добавить маршрут как это:
routes.MapRoute(
"ViewStockNext", // Route name
"Inventory/ViewStockNext/{firstItem}", // URL with parameters
new { controller = "Inventory", action = "ViewStockNext" } // Parameter defaults
);
причиной является маршрут по умолчанию, только ищет действия без параметра или параметра, названного 'идентификатором'.
Редактирование: Heh, nevermind Jarret добавил пример маршрута после регистрации.
public ActionResult ViewNextItem(int? id)
делает id
целое число nullable тип, никакая потребность в string<-> международные преобразования.
Или, Вы могли попытаться изменить тип параметра для строкового представления, затем преобразовать строку в целое число в методе. Я плохо знаком с MVC, но я полагаю, что Вам нужны nullable объекты в Вашем списке параметров, как еще контроллер укажет, что никакой такой параметр не был обеспечен? Так...
public ActionResult ViewNextItem(string id)...
Есть другой способ сделать это (более подробно описанный в примере Стивена Вальтера пейджер
По сути, вы создаете ссылку в представлении:
Html.ActionLink("Next page", "Index", routeData)
В routeData вы можете укажите пары имя / значение (например, routeData ["page"] = 5), и в функции Index контроллера соответствующие параметры получат значение. То есть
public ViewResult Index(int? page)
будет иметь страницу , переданную как 5. I Должен признать, довольно необычно, что строка ("страница") автоматически становится переменной - но именно так MVC работает и на других языках ...