MVC ActionLink добавляет маршрут как строку запроса, а не значения маршрута

У меня есть ссылка на действие MVC:

@Html.ActionLink("Update Information", "Index", "Performance", 
new { performanceid = item.PerformanceId }, null)

Href этой ссылки на действие выглядит так: / Performance / Index? Performanceid = 100

В моем RouteConfig.cs у меня есть следующие маршруты в следующем порядке:

routes.MapRoute(
      "ShowPerformanceOptions",
      "Performance/{performanceid}/Index",
      new { controller = "Peformance", action = "Index" }
);

routes.MapRoute(
      "Default",
      "{controller}/{action}/{id}",
      new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Я не хочу, чтобы в конец URL-адреса добавлялась строка запроса, вместо этого я бы хотел, чтобы URL-адрес выглядел так: / Performance / 360 / Index

Я прошел через множество различных вариантов, включая добавление параметров маршрута и необязательных параметров URL-адреса, а также изменение способа написания моей ActionLink. Кажется, ничего не работает.

Есть какие-нибудь идеи?


person Christian Coan    schedule 28.07.2015    source источник
comment
У вас есть опечатка в определении параметров маршрута по умолчанию, это Peformance вместо Performance.   -  person haim770    schedule 28.07.2015
comment
Это тоже работает! Хорошее место, я подумал, что должно быть что-то не так, потому что он не распознал ни один из моих маршрутов, которые я указал! Спасибо   -  person Christian Coan    schedule 28.07.2015


Ответы (2)


Чтобы сгенерировать URL-адрес на основе имени маршрута, используйте _ 1_ метод

@Html.RouteLink("Update Information", "ShowPerformanceOptions", new { performanceid = item.PerformanceId })

Хорошее прочтение В чем разница между RouteLink и ActionLink в ASP.NET MVC?

person Satpal    schedule 28.07.2015
comment
Фактически, ActionLink должен также использовать указанный шаблон. - person haim770; 28.07.2015
comment
@ haim770, да, даже это сработает, но я не уверен, что он сгенерирует тег привязки - person Satpal; 28.07.2015
comment
@Satpal, я имел в виду ActionLink, и он будет сгенерировать <a>. Я предполагаю, что настоящая проблема - это опечатка в определении маршрута: Peformance вместо Performance. - person haim770; 28.07.2015

Как отметил @Satpal, ActionLink не работал из-за опечатки в самом маршруте:

routes.MapRoute(
      "ShowPerformanceOptions",
      "Performance/{performanceid}/Index",
      new { controller = "**Peformance**", action = "Index" }
);

routes.MapRoute(
      "ShowPerformanceOptions",
      "Performance/{performanceid}/Index",
      new { controller = "**Performance**", action = "Index" }
);
person Christian Coan    schedule 28.07.2015