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

120

Думаю, название в значительной степени подводит итог:

В чем разница между RouteLink()и ActionLink()в ASP.NET MVC?

т.е. когда вы используете Html.RouteLink()и когда используете Html.ActionLink()в своем представлении?

парень
источник

Ответы:

78

Действие и маршруты не обязательно должны иметь отношение 1: 1.

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

RouteLink сгенерирует URL-адрес для определенного маршрута, определенного либо по имени, либо по значениям маршрута.

Чад Моран
источник
+1 за отличный пост в блоге. Действительно удобно. И показывает, что возможностей слишком много. Ребята из MS должны реализовывать только самые быстрые. Но люди предпочитают использовать самую медленную причудливую лямбду.
Роберт Коритник,
эй, спасибо Но я думаю, что ссылка не работает.
пожалуйста, дайте
5
можно примеры?
MaylorTaylor
67

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

Html.ActionLink()упрощает быстрое создание ссылок ActionLink и дает вам базовый контроль над тем, что отображается. Если у вас не слишком много маршрутов или вам не нужно давать слишком много или слишком конкретную информацию, это сработает.

Этот Html.RouteLink()метод принимает немного другие аргументы и, таким образом, дает вам немного более подробный контроль над тем, как обрабатываются вещи. Я обычно использую этот метод, когда мой сценарий немного сложнее или когда у меня есть более подробная структура маршрута.
Одним из примеров является недавний проект, в котором у меня (для гибкости) было несколько разных маршрутов, которые все были довольно простыми, чем один сложный, который позволял бы получить много информации. Таким образом, я получил четыре или пять маршрутов для одного и того же контроллера, все с указанным действием по умолчанию. Я в основном использовалRouteLink версию, потому что, когда я указывал имя маршрута, параметры по умолчанию вводились автоматически.

Используйте их по своему усмотрению и так, как они имеют смысл для вашего проекта. На самом деле у любого из них нет положительных / отрицательных сторон (что не соответствует другим ...).

Томас Ашан
источник
19

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

Крэйг Стунц
источник
1
Симоне Кьяретта провела некоторый анализ производительности здесь: codeclimber.net.nz/archive/2009/04/17/…
Дмитрий
12

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

Саймон Стил
источник