Параметры в ваших маршрутах {roleId}
, {applicationName}
и {roleName}
не соответствуют именам параметров в ваших методах действия. Я не знаю, имеет ли это значение, но становится сложнее выяснить, каково ваше намерение.
Соответствует ли ваш itemId шаблону, который можно сопоставить с помощью регулярных выражений? Если это так, то вы можете добавить ограничение к вашему маршруту, чтобы только идентификаторы URL, соответствующие шаблону, идентифицировались как содержащие itemId.
Если ваш itemId содержит только цифры, это будет работать:
routes.MapRoute("AssignRemove",
"Items/{action}/{itemId}",
new { controller = "Items" },
new { itemId = "\d+" }
);
Редактировать: Вы также можете добавить ограничение к маршруту AssignRemovePretty
, чтобы потребовались {parentName}
и {itemName}
.
Редактировать 2: Кроме того, поскольку ваше первое действие просто перенаправляет на второе, вы можете устранить некоторую двусмысленность, переименовав первое.
// Method #1
public ActionResult AssignRemovePretty(string parentName, string itemName) {
// Logic to retrieve item's ID here...
string itemId = ...;
return RedirectToAction("Assign", itemId);
}
// Method #2
public ActionResult Assign(string itemId, string searchTerm, int? page) { ... }
Затем укажите имена действий в ваших маршрутах, чтобы вызвать соответствующий метод:
routes.MapRoute("AssignRemove",
"Items/Assign/{itemId}",
new { controller = "Items", action = "Assign" },
new { itemId = "\d+" }
);
routes.MapRoute("AssignRemovePretty",
"Items/Assign/{parentName}/{itemName}",
new { controller = "Items", action = "AssignRemovePretty" },
new { parentName = "\w+", itemName = "\w+" }
);