MVC ActionLink генерирует разные типы ссылок ... почему? - PullRequest
4 голосов
/ 24 февраля 2009

Я новичок в MVC land, и у меня есть приложение, над которым я работаю. У меня есть 2 разные ссылки с 2 маршрутами в моем глобальном, которые довольно похожи

маршрут 1

routes.MapRoute("Category", "Movies/{category}/{subcategory}", 
    new { controller = "Catalog", action = "Index", category = "", subcategory = "" });

маршрут 2

routes.MapRoute("Movie", "Movie/{movie}", 
    new { controller = "Movie", action = "Index", movie = "" });

Когда я вызываю actionlink для первого маршрута, он создает его так, как мне кажется:

.../Movies/Category/SubCategory

однако, когда я создаю свою вторую ссылку, она заполняется следующим образом:

.../Movie?movieId=ff569575-08ec-4049-93e2-901e7b0cb96a

Раньше я использовал строку вместо guid, и она все еще делала то же самое, т.е.

.../Movie?movieName=Snatch

мои ссылки для действий настроены следующим образом

<%= Html.ActionLink(parent.Name, "Index", "Catalog",
    new { category = parent.Name, subCategory = "" }, null)%>

<%= Html.ActionLink(movie.Name, "Index", "Movie", 
    new { movieId = movie.MovieId }, null)%>

Мое приложение все еще работает, но я подумал, что это странное поведение. любая помощь будет отличной.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 24 февраля 2009
routes.MapRoute("Movie", "Movie/{movieId}", 
    new { controller = "Movie", action = "Index", movie = "" });

Если текст маршрута не совпадает с названием свойства, которое вы отправляете в ссылку mvc?

4 голосов
/ 24 февраля 2009

Проблема в том, что когда вы вызываете ActionLink, система маршрутизации не может определить, какой из двух маршрутов использовать, поэтому выбирает первый. Решение состоит в том, чтобы использовать RouteLink вместо ActionLink. RouteLink позволяет указать имя маршрута, который будет использоваться при создании URI. Тогда нет никакой двусмысленности относительно того, какой маршрут использовать. Я думаю, что ActionLink устарел. Я не могу представить себе причины использовать его вместо RouteLink.

Однако у вас все еще может быть проблема, когда пользователь отправляет ссылки. В этом случае используйте ограничения маршрута, чтобы обеспечить выбор правильного маршрута.

Эндрю правильно (с положительным голосом), что токены, используемые в ActionLink / RouteLink, и сам маршрут должны совпадать.

...