URL-хелперы

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

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

URL-хелперы похожи на хелперы ActionLink и RouteLink за тем исключением, что они не возвращают HTML, а создают пути URL и возвращают их в виде строк. Имеется три типа URL-хелперов:

  • Action
  • Content
  • RouteUrl

Хелпер Url.Action похож на Html.ActionLink за тем исключением, что но не возвращает тег якоря. Например, следующий код отображает адрес URL, но не саму ссылку:

@Url.Action("GetUser", "Home", new { name = "Тоm", id = 10 }, null)

Этот путь затем можно применить при формировании ссылки:

<a href='@Url.Action("GetUser", "Home", new { name = "Тоm", id = 10 }, null)'>Ссылка</a>

Хелпер RouteUrl использует тот же шаблон, что и Action, но как и RouteLink, принимает имя маршрута и аргументы для параметров маршрута:

@Url.RouteUrl(new { controller = "Home", action = "GetUser", name = "Tom", id = 10 })

Хелпер Content преобразует относительные пути в абсолютные, например:

<script src='@Url.Content("~/lib/jquery/dist/jquery.js")'></script>

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

public IActionResult About()
{
    string contentUrl = Url.Content("~/lib/jquery/dist/jquery.js");
    string actionUrl = Url.Action("Index","Home");
    return Content(actionUrl);
}

При использовании методов Url.Action() и Url.RouteLink(), следует учитывать, что они, также как и Html.ActionLink или AnchorTagHelper используют систему маршрутизации.

Например, пусть у нас будут определены следующие маршруты:

app.UseEndpoints(endpoints =>
{
	endpoints.MapControllerRoute(
		name: "default",
		pattern: "UserStore",
		defaults: new { controller = "Users", action = "List" });
		
	endpoints.MapControllerRoute(
		name: "default1",
		pattern: "Store/Sub{action}/{id?}",
		defaults: new { controller = "Home" });
		
	endpoints.MapControllerRoute(
		name: "default2",
		pattern: "{controller=Home}/{action=Index}/{id?}");
});

То вызов

@Url.Action("Index", "Home")

в соответствии со вторым маршрутом сгенерирует следующий путь:

/Store/SubIndex

А следующий вызов будет соответствовать первому маршруту:

@Url.RouteUrl(new { controller = "Users", action = "List"})

поэтому будет сгенерирован следующий путь:

/UserStore

Или еще один пример, соответствующий первому маршруту:

@Url.Action("List", "Users", new { name = "Tom", id = 10 }, null)

Его результатом будет следующий путь:

/UserStore?name=Tom&id=10

Поэтому при использовании данных хелперов также надо принимать во внимание все определенные в приложении машруты.

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