MVC - зачем использовать ActionLink вместо жесткого кодирования ссылки?

64
6

Microsoft MVC, Razor, Visual Studio 2013

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

<a href="/Review/MyReviews">My Reviews</a>

@Html.ActionLink(linkText:="My Reviews", controllerName:="Review", actionName:="MyReviews")

спасибо, Джон

спросил(а) 2021-01-19T18:04:43+03:00 6 месяцев, 2 недели назад
1
Решение
78

Да. Полезно использовать Url.Action() для генерации URL и Html.ActionLink() для генерации якорных тегов, так как он обязательно будет генерировать правильный относительный Url из имени действия и контроллера.

В некоторых случаях, когда приложение размещается во внутренних каталогах, наши таблицы стилей CSS и js- файлы не загружаются из-за неправильного URL-адреса.

Рассмотрим сценарий, в котором вы используете якорный тэг с первым подходом на странице, и представление находится во вложенной подкаталоге, например " Виды → Главная → Частицы → _Index.cshtml.

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

<a href="/About/Index">About</a>

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

<a href="../About/Index">About</a>

и после написания метки привязки убедитесь, что Url создан правильно:

<a href="@Url.Action("Index","About")">About</a>

или:

Html.ActionLink(linkText:="About", controllerName:="About", actionName:="Index")

Использование Plain hardcoded url вызывает проблему, как в этой SO Post.

OP столкнулся с проблемой. Ajax-вызов не @Url.Action() в действие из-за неправильного URL- @Url.Action(), а при использовании помощника @Url.Action() решалась проблема, так как она гарантировала правильность создания URL- @Url.Action().

Вы должны также прочитать эту информативную статью, чтобы получить более четкое понимание

ответил(а) 2021-01-19T18:04:43+03:00 6 месяцев, 2 недели назад
46

Полностью согласен с @Ehsan: помощник ActionLink может сэкономить вам много неприятностей при перемещении приложения на веб-сервер (относительный путь).

Кроме того, ActionLink лучше, потому что, если вы последнее измените имя контроллера или Action, компилятор должен предупредить вас.

С другой стороны, "href..." не может видеть ошибку до возникновения ошибки времени выполнения.

ответил(а) 2021-01-19T18:04:43+03:00 6 месяцев, 2 недели назад
46

+1 Попробуйте использовать помощники MVC для генерации URL-адресов столько, сколько сможете, поскольку вы можете использовать:

1) Воспользуйтесь выводом исходящего URL-кода ASP.NET MVC из шаблонов маршрутов. Таким образом, даже если вам случится изменить/версию вашего шаблона маршрута, URL-адрес, созданный с помощью помощников, может правильно восстановить этот URL-адрес. Таким образом, ссылки не нарушаются.


2) У них хорошие перегрузки, которые улучшают удобочитаемость и намного более чистые. Например, использование анонимных типов для значений маршрута и атрибутов html и т.д. Вместо уродливых конкатенаций

3) Вы можете включить их в сценарий также как теги сервера, чтобы те же самые ссылки генерировались в зависимости от схемы генерации URL.

ответил(а) 2021-01-19T18:04:43+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема