Генерация исходящих адресов URL

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Еще одной стороной механизма маршрутизации является генерации исходящих адресов в приложении, например, при выводе их в представлении. Наиболее простой способ вывода адреса является использование анкора - элемента a:

<a href="Home/Index/3" />

Но также мы можем использовать специальные хелперы рендеринга - Html.ActionLink и Html.RouteLink

Html.ActionLink

Хелпер 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#, то для правильного рендеринга нам надо перед ним указать знак @.

Html.RouteLink

Хелпер 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-хелперы

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 мог бы стать некорректным, если бы вы перенесли приложение в другой виртуальный каталог.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850