В чем разница между RouteLink и ActionLink в ASP.NET MVC? - PullRequest
116 голосов
/ 14 мая 2009

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

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

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

Ответы [ 4 ]

76 голосов
/ 14 мая 2009

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

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

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

66 голосов
/ 14 мая 2009

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

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

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

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

19 голосов
/ 14 мая 2009

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

12 голосов
/ 14 мая 2009

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

...