Я делаю это, создавая новый маршрут для контроллера Item, который включает в себя OrderId. Не имеет смысла иметь Item без Order, поэтому OrderId требуется с помощью параметра ограничений.
routes.MapRoute(
"OrderItems",
"Item/{action}/{orderId}/{id}",
new { controller = "Item" },
new { orderId = @"d+" }
);
Таким образом, URL будет выглядеть как http://<sitename>/Item/Create/8
, где 8 - это OrderId, для которого создается элемент. Нечто подобное можно было бы сделать для маршрутов действия Delete с http://<sitename>/Item/Delete/8/5
, где 8 - это OrderId, а 5 - это ItemId.
Ваши методы действий будут выглядеть так:
public ActionResult Create(int orderId)
public ActionResult Delete(int orderId, int id)
Вы также можете настроить его так, чтобы URL выглядели как http://<sitename>/Order/8/Item/Create
и http://<sitename>/Order/8/Item/Delete/5
, если кажется, что это более четко показывает, что происходит.
Тогда маршрут будет выглядеть так:
routes.MapRoute(
"OrderItems",
"Order/{orderId}/Item/{action}/{id}",
new { controller = "Item" },
new { orderId = @"d+" }
);