Какая разница между RouteLink и ActionLink в ASP.NET MVC?

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

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

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

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

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