Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
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
Поэтому при использовании данных хелперов также надо принимать во внимание все определенные в приложении машруты.