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

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

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

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

4 ответов


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

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

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


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

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

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

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


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


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