Попробуйте это:
// Sample URL: /Fixtures/Team/id
routes.MapRoute(
"Fixtures-by-TeamID",
"Fixtures/Team/{teamId}",
new { controller = "Fixtures", action = "Team", teamId = -1 }
);
ваш контроллер должен выглядеть так:
public class FixturesController : BaseController // or whatever
{
/*...*/
public ActionResult Team(int teamId)
{
return View("Detail", Team.GetTeamById(teamId)) // or whatever
}
/*...*/
}
И ваша ссылка будет выглядеть
<%= Html.ActionLink("Click here for the team details", "Team", "Fixtures", new { teamId = ViewModel.Data.Id /*orwhateverlol*/ }) %>
(у меня нет MVC на этой машине, так что это все из памяти; может быть синтаксическая ошибка или некоторые аргументы поменялись местами).
Обратите внимание, что путь к вашей карте маршрута соответствует вашему 1) контроллеру, 2) действию 3) имени аргумента. Я обнаружил, что действие по умолчанию (третий аргумент в MapRoute) работает, в то время как ваша перегрузка этого метода я никогда раньше не видел (может быть задержка от предыдущего выпуска).
Также обратите внимание, как ваш FixturesController соответствует пути (Fixtures) и имени действия (Team), а также соответствует аргументу (teamId).
Наконец, последний аргумент вашего ActionLink должен совпадать с аргументами вашего контроллера по имени (teamId) и типу.
На данный момент это слишком "волшебно" (на заднем плане происходит МНОГО сравнения строк!). Надеюсь, со временем это улучшится. Старый стиль Expression был НАМНОГО лучше. По сути, вы назвали метод, который вы хотели запустить, со значениями, которые вы хотели бы передать. Я надеюсь, что они вернут этот стиль выражения обратно в рамки. Хаак