2009-02-23 1 views
4

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

маршрут 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

мои actionlinks настроены следующим образом

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

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

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

Спасибо!

ответ

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

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

+1

Вы правы, что им нужно совпадение, но он может пожелать изменить вызов ActionLink/RouteLink вместо изменения маршрута. –

+1

Спасибо, ребята. Я смог исправить это, удалив конфликтующие имена. – Dacrocky

4

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^