Pomocná rutina značky ukotvení v ASP.NET Core

Peter Kellner a Scott Addie

Pomocník značky ukotvení vylepšuje standardní značku ukotvení HTML přidáním<a ... ></a> nových atributů. Podle konvence mají názvy atributů předponu asp-. Vykreslená hodnota atributu elementu href ukotvení je určena hodnotami asp- atributů.

Přehled pomocných rutin značek najdete v tématu Pomocné rutiny značek v ASP.NET Core.

Zobrazení nebo stažení ukázkového kódu (postup stažení)

SpeakerController se používá v ukázkách v tomto dokumentu:

using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;

public class SpeakerController : Controller
{
    private List<Speaker> Speakers =
        new List<Speaker>
        {
            new Speaker {SpeakerId = 10},
            new Speaker {SpeakerId = 11},
            new Speaker {SpeakerId = 12}
        };

    [Route("Speaker/{id:int}")]
    public IActionResult Detail(int id) =>
        View(Speakers.FirstOrDefault(a => a.SpeakerId == id));

    [Route("/Speaker/Evaluations", 
           Name = "speakerevals")]
    public IActionResult Evaluations() => View();

    [Route("/Speaker/EvaluationsCurrent",
           Name = "speakerevalscurrent")]
    public IActionResult Evaluations(
        int speakerId,
        bool currentYear) => View();

    public IActionResult Index() => View(Speakers);
}

public class Speaker
{
    public int SpeakerId { get; set; }
}

Atributy pomocné rutiny značky ukotvení

asp-controller

Atribut asp-controller přiřadí kontroler použitý k vygenerování adresy URL. Následující kód obsahuje seznam všech mluvčích:

<a asp-controller="Speaker"
   asp-action="Index">All Speakers</a>

Vygenerovaný kód HTML:

<a href="/Speaker">All Speakers</a>

asp-controller Pokud je atribut zadán a asp-action není, výchozí asp-action hodnota je akce kontroleru přidružená k aktuálně spuštěné zobrazení. Pokud asp-action z předchozího kódu vynecháte a pomocné rutiny značky ukotvení se použije vHome zobrazení indexu kontroleru (/Home), vygenerovaný kód HTML je:

<a href="/Home">All Speakers</a>

asp-action

Hodnota atributu asp-action představuje název akce kontroleru zahrnutý do vygenerovaného href atributu. Následující kód nastaví vygenerovanou href hodnotu atributu na stránku vyhodnocení mluvčího:

<a asp-controller="Speaker"
   asp-action="Evaluations">Speaker Evaluations</a>

Vygenerovaný kód HTML:

<a href="/Speaker/Evaluations">Speaker Evaluations</a>

Pokud není zadán žádný asp-controller atribut, použije se výchozí kontroler volající zobrazení, které spouští aktuální zobrazení.

Pokud je Indexhodnota atributu asp-action , není k adrese URL připojena žádná akce, což vede k vyvolání výchozí Index akce. Zadaná akce (nebo výchozí nastavení) musí existovat v kontroleru, na který odkazuje asp-controller.

asp-route-{value}

Atribut asp-route-{value} umožňuje předponu trasy se zástupnými čísly. Jakákoli hodnota zabírající {value} zástupný symbol se interpretuje jako potenciální parametr trasy. Pokud se nenajde výchozí trasa, připojí se tato předpona trasy k vygenerovanému href atributu jako parametr požadavku a hodnota. Jinak se nahradí v šabloně trasy.

Zvažte následující akci kontroleru:

private List<Speaker> Speakers =
    new List<Speaker>
    {
        new Speaker {SpeakerId = 10},
        new Speaker {SpeakerId = 11},
        new Speaker {SpeakerId = 12}
    };

[Route("Speaker/{id:int}")]
public IActionResult Detail(int id) =>
    View(Speakers.FirstOrDefault(a => a.SpeakerId == id));

S výchozí šablonou trasy definovanou ve startupu.Configure:

app.UseMvc(routes =>
{
    // need route and attribute on controller: [Area("Blogs")]
    routes.MapRoute(name: "mvcAreaRoute",
                    template: "{area:exists}/{controller=Home}/{action=Index}");

    // default route for non-areas
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

Zobrazení MVC používá model poskytovaný akcí následujícím způsobem:

@model Speaker
<!DOCTYPE html>
<html>
<body>
    <a asp-controller="Speaker"
       asp-action="Detail" 
       asp-route-id="@Model.SpeakerId">SpeakerId: @Model.SpeakerId</a>
</body>
</html>

Zástupný symbol výchozí trasy {id?} se shodoval. Vygenerovaný kód HTML:

<a href="/Speaker/Detail/12">SpeakerId: 12</a>

Předpokládejme, že předpona trasy není součástí odpovídající šablony směrování, stejně jako v následujícím zobrazení MVC:

@model Speaker
<!DOCTYPE html>
<html>
<body>
    <a asp-controller="Speaker"
       asp-action="Detail"
       asp-route-speakerid="@Model.SpeakerId">SpeakerId: @Model.SpeakerId</a>
<body>
</html>

Následující kód HTML se vygeneruje, protože speakerid v odpovídající trase nebyl nalezen:

<a href="/Speaker/Detail?speakerid=12">SpeakerId: 12</a>

Pokud není zadáno, asp-controllerasp-action následuje stejné výchozí zpracování jako v atributu asp-route .

asp-route

Atribut asp-route slouží k vytvoření odkazu URL přímo na pojmenovanou trasu. Pomocí atributů směrování lze trasu pojmenovat, jak je znázorněno SpeakerController v akci a použito v této Evaluations akci:

[Route("/Speaker/Evaluations", 
       Name = "speakerevals")]

V následujícím kódu asp-route odkazuje atribut na pojmenovanou trasu:

<a asp-route="speakerevals">Speaker Evaluations</a>

Pomocná rutina značky ukotvení vygeneruje trasu přímo na danou akci kontroleru pomocí adresy URL /Speaker/Evaluations. Vygenerovaný kód HTML:

<a href="/Speaker/Evaluations">Speaker Evaluations</a>

Pokud asp-controller nebo asp-action je zadána kromě asp-route, trasa vygenerovaná nemusí být to, co očekáváte. Abyste se vyhnuli konfliktu tras, asp-route neměli byste je používat s asp-controller atributy.asp-action

asp-all-route-data

Atribut asp-all-route-data podporuje vytvoření slovníku párů klíč-hodnota. Klíč je název parametru a hodnota je hodnota parametru.

V následujícím příkladu je slovník inicializován a předán do Razor zobrazení. Další možností je předání dat s vaším modelem.

@{
var parms = new Dictionary<string, string>
            {
                { "speakerId", "11" },
                { "currentYear", "true" }
            };
}

<a asp-route="speakerevalscurrent"
   asp-all-route-data="parms">Speaker Evaluations</a>

Předchozí kód vygeneruje následující kód HTML:

<a href="/Speaker/EvaluationsCurrent?speakerId=11&currentYear=true">Speaker Evaluations</a>

Slovník asp-all-route-data je zploštěný tak, aby vytvořil řetězec dotazu splňující požadavky přetížené Evaluations akce:

public IActionResult Evaluations() => View();

[Route("/Speaker/EvaluationsCurrent",
       Name = "speakerevalscurrent")]
public IActionResult Evaluations(

Pokud některé klíče ve slovníku odpovídají parametrům trasy, nahradí se tyto hodnoty v trase podle potřeby. Ostatní neodpovídající hodnoty se generují jako parametry požadavku.

asp-fragment

Atribut asp-fragment definuje fragment adresy URL pro připojení k adrese URL. Pomocná rutina značky ukotvení přidá znak hash (#). Vezměte v úvahu následující kód:

<a asp-controller="Speaker"
   asp-action="Evaluations"
   asp-fragment="SpeakerEvaluations">Speaker Evaluations</a>

Vygenerovaný kód HTML:

<a href="/Speaker/Evaluations#SpeakerEvaluations">Speaker Evaluations</a>

Značky hash jsou užitečné při vytváření aplikací na straně klienta. Dají se použít například k snadnému označení a vyhledávání v JavaScriptu.

asp-area

Atribut asp-area nastaví název oblasti použité k nastavení příslušné trasy. Následující příklady znázorňují, jak asp-area atribut způsobuje přemapování tras.

Použití na Razor stránkách

Razor Oblasti stránek se podporují v ASP.NET Core 2.1 nebo novějším.

Zvažte následující hierarchii adresářů:

  • {Project name}
    • Wwwroot
    • Oblasti
      • Přednášky
        • Stránky
          • _ViewStart.cshtml
          • Index.cshtml
          • Index.cshtml.cs
    • Stránky

Značka odkazovaná na indexovouRazor stránku oblasti Relací je:

<a asp-area="Sessions"
   asp-page="/Index">View Sessions</a>

Vygenerovaný kód HTML:

<a href="/Sessions">View Sessions</a>

Tip

Pokud chcete podporovat oblasti v Razor aplikaci Pages, proveďte jednu z následujících akcí:Startup.ConfigureServices

Využití v MVC

Zvažte následující hierarchii adresářů:

  • {Project name}
    • Wwwroot
    • Oblasti
      • Blogy
        • Kontrolery
          • HomeController.cs
        • Zobrazení
          • Home
            • AboutBlog.cshtml
            • Index.cshtml
          • _ViewStart.cshtml
    • Kontrolery

Nastavení asp-area na "Blogy" předpony adresáře Areas/Blogs na trasy přidružených kontrolerů a zobrazení pro tuto značku ukotvení. Revize, která odkazuje na zobrazení AboutBlog , je:

<a asp-area="Blogs"
   asp-controller="Home"
   asp-action="AboutBlog">About Blog</a>

Vygenerovaný kód HTML:

<a href="/Blogs/Home/AboutBlog">About Blog</a>

Tip

Pokud chcete podporovat oblasti v aplikaci MVC, musí šablona trasy obsahovat odkaz na oblast, pokud existuje. Tato šablona je reprezentována druhým parametrem routes.MapRoute volání metody v Startup.Configure:

app.UseMvc(routes =>
{
    // need route and attribute on controller: [Area("Blogs")]
    routes.MapRoute(name: "mvcAreaRoute",
                    template: "{area:exists}/{controller=Home}/{action=Index}");

    // default route for non-areas
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

asp-protocol

Atribut asp-protocol slouží k určení protokolu (například https) v adrese URL. Příklad:

<a asp-protocol="https"
   asp-controller="Home"
   asp-action="About">About</a>

Vygenerovaný kód HTML:

<a href="https://localhost/Home/About">About</a>

Název hostitele v příkladu je localhost. Pomocník značky ukotvení používá při generování adresy URL veřejnou doménu webu.

asp-host

Atribut asp-host slouží k zadání názvu hostitele v adrese URL. Příklad:

<a asp-protocol="https"
   asp-host="microsoft.com"
   asp-controller="Home"
   asp-action="About">About</a>

Vygenerovaný kód HTML:

<a href="https://microsoft.com/Home/About">About</a>

asp-page

Atribut asp-page se používá se stránkami Razor Pages. Slouží k nastavení hodnoty atributu href značky ukotvení na konkrétní stránku. Předpona názvu / stránky pomocí adresy URL pro odpovídající stránku z kořenového adresáře aplikace:

Pomocí ukázkového kódu vytvoří následující kód odkaz na stránku účastníka Razor :

<a asp-page="/Attendee">All Attendees</a>

Vygenerovaný kód HTML:

<a href="/Attendee">All Attendees</a>

Atribut asp-page se vzájemně vylučují s asp-routeatributy , asp-controllera asp-action atributy. asp-page Lze však použít asp-route-{value} k řízení směrování, jak ukazuje následující kód:

<a asp-page="/Attendee"
   asp-route-attendeeid="10">View Attendee</a>

Vygenerovaný kód HTML:

<a href="/Attendee?attendeeid=10">View Attendee</a>

Pokud odkazovaná stránka neexistuje, vygeneruje se odkaz na aktuální stránku pomocí okolní hodnoty z požadavku. Není uvedeno žádné upozornění s výjimkou úrovně protokolu ladění.

obslužná rutina asp-page

Atribut obslužné rutiny asp-page se používá se stránkami Razor . Je určená pro propojení s konkrétními obslužné rutiny stránek.

Zvažte následující obslužnou rutinu stránky:

public void OnGetProfile(int attendeeId)
{
    ViewData["AttendeeId"] = attendeeId;

    // code omitted for brevity
}

Přidružené značkové odkazy modelu stránky na obslužnou rutinu OnGetProfile stránky. Všimněte si, že On<Verb> předpona názvu metody obslužné rutiny stránky je vynechána v hodnotě atributu asp-page-handler . Pokud je metoda asynchronní, Async přípona je také vynechána.

<a asp-page="/Attendee"
   asp-page-handler="Profile"
   asp-route-attendeeid="12">Attendee Profile</a>

Vygenerovaný kód HTML:

<a href="/Attendee?attendeeid=12&handler=Profile">Attendee Profile</a>

Další prostředky