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 Index
hodnota 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-controller
asp-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¤tYear=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
- Přednášky
- 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
Nastavte verzi kompatibility na verzi 2.1 nebo novější.
RazorPagesOptions.AllowAreas Nastavte vlastnost na
true
:services.AddMvc() .AddRazorPagesOptions(options => options.AllowAreas = true);
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
- Home
- Kontrolery
- Blogy
- 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-route
atributy , asp-controller
a 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>