Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Еще одной стороной механизма маршрутизации является генерации исходящих адресов в приложении, например, при выводе их в представлении.
Наиболее простой способ вывода адреса является использование анкора - элемента a
:
<a href="Home/Index/3" />
Но также мы можем использовать специальные хелперы рендеринга - Html.ActionLink и Html.RouteLink
Хелпер ActionLink
создает гиперссылку на действие контроллера. Если мы создаем ссылку на действие, определенное в том же
контроллере, то можем просто указать имя действия:
@Html.ActionLink("Жми здесь", "Show")
Что создаст вам следующую разметку:
<a href="/Home/Show">Жми здесь</a>
Когда надо указать ссылку на действие из другого контроллера, то в хелпере ActionLink
в качестве третьего аргумента
имя контроллера. Например, ссылка на действие List
контроллера Book
будет создаваться так:
@Html.ActionLink("Список книг", "List", "Book")
Кроме того, если у нас в некотором методе Index контроллера Book определено несколько параметров:
public class BookController : Controller { public string Index(string author="Толстой", int id=1) { return author + " " + id.ToString(); } }
То перегруженная версия хелпера ActionLink
позволяет передать параметр объекта (обычно анонимный тип) для параметра routeValues
.
Среда выполнения принимает свойства объекта и использует их для создания значений маршрутизации (имена свойств становятся именами параметров маршрута, а значения свойств представляют значения параметра маршрута).
Создадим ссылку для вышеопределенного действия контроллера:
@Html.ActionLink("Все книги", "Index", "Book", new { id=10}, null) //или @Html.ActionLink("Достоевский", "Index", "Book", new { author="Достоевский", id=5}, null)
Последний параметр в данном хелпере является параметром htmlAttributes
. Мы можем использовать этот параметр для установки
значения атрибута элемента HTML. В данном случае передается значение null (то есть никаких атрибутов не устанавливается).
Теперь попробуем передать атрибуты, например, установить атрибуты id
и class
:
@Html.ActionLink("Все книги", "Index", "Book", new { author="Толстой",id = 10 }, new { id="Tolstoi", @class="link"})
Сгенерированная html-разметка будет выглядеть следующим образом:
<a class="link" href="/Book/Index/10?author=%D0%A2%D0%BE%D0%BB%D1%81%D1%82%D0%BE%D0%B9" id="Tolstoi">Все книги</a>
Обратите внимание на знак @
перед словом class: поскольку слово "class" является зарезервированным словом в C#, то
для правильного рендеринга нам надо перед ним указать знак @.
Хелпер RouteLink
использует похожий шаблон, что и ActionLink
: он принимает имя маршрута, но не требует
аргументов для имени контроллера и имени действия. Так, первый пример с ActionLink
эквивалентен следующему коду:
@Html.RouteLink("Все книги", new { controller = "Book", action = "Index", author = "Толстой", id = 10 }, new { id = "Tolstoi", @class = "link" })
Чтобы использовать маршрут, нам просто надо указать имя определенного нами маршрута и затем определить при необходимости дополнительные параметры. Например, возьмем стандартный маршрут Default:
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id=RouteParameter.Optional } } );
Тогда создать ссылку мы можем, например, так:
@Html.RouteLink("Все книги","Default",new { action = "Show" })
URL-хелперы похожи на хелперы ActionLink
и RouteLink
за тем исключением, что они не возвращают HTML,
а создают пути URL и возвращают их в виде строк. Имеется три типа URL-хелперов:
Action
Content
RouteUrl
Хелпер Action
похож на ActionLink за тем исключением, что но не возвращает тег якоря. Например, следующий код отображает
адрес URL, но не саму ссылку:
@Url.Action("Index", "Book", new { author = "Толстой", id = 10 }, null)
Хелпер RouteUrl
использует тот же шаблон, что и Action
, но как и RouteLink
, принимает имя маршрута
и аргументы для параметров маршрута:
@Url.RouteUrl(new { controller = "Book", action = "Index", author = "Толстой", id = 10 })
Хелпер Content
преобразует относительные пути в абсолютные. Пример использования хелпера Content можно увидеть в представлении _Layout:
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
С помощью тильды (~
) хелпер Content генерирует необходимый URL относительно расположения приложения. Без тильды URL мог бы стать
некорректным, если бы вы перенесли приложение в другой виртуальный каталог.