Pomocná zařízení značek v ASP.NET Core
Autor: Rick Anderson
Co jsou pomocníci značek
Pomocná rozšíření značek umožňují, aby se kód na straně serveru mohl podílet na vytváření a vykreslování elementů HTML v Razor souborech. Například předdefinovaný může k názvu image připojit ImageTagHelper číslo verze. Při každé změně image server vygeneruje novou jedinečnou verzi image, takže klienti budou mít zaručeno, že bitové kopie budou mít aktuální (místo zastaralé image uložené v mezipaměti). Existuje mnoho integrovaných pomocných prvků značek pro běžné úlohy , jako je vytváření formulářů, odkazů, načítání prostředků a další, a ještě více dostupných ve veřejných úložištích GitHub a jako NuGet balíčky. Pomocníci značek jsou vytváření v jazyce C# a cílí na elementy HTML na základě názvu elementu, názvu atributu nebo nadřazené značky. Například integrovaný objekt může cílit LabelTagHelper na element HTML při použití <label> LabelTagHelper atributů. Pokud jste obeznámeni s pomocníci HTML,značek pomocných prvků omezte explicitní přechody mezi HTML a C# v Razor zobrazeních. V mnoha případech poskytují pomocná opatření HTML alternativní přístup ke konkrétnímu pomocníkovi značek, ale je důležité si uvědomit, že pomocná opatření značek nenahrazuje pomocné prvky HTML a pro každý pomocný prvek HTML není k dispozici pomocná metoda značky. Pomocná zařízení značek v porovnání s pomocníky HTML podrobněji vysvětlují rozdíly.
Co poskytují pomocníci značek
Vývojové prostředí vhodné pro HTML
Ve většině částí kód používající Razor pomocné prvky značek vypadá jako standardní HTML. Návrháři front-endu conversant s HTML/CSS/JavaScriptem mohou upravovat bez učení syntaxe Razor jazyka Razor C#.
Bohaté prostředí IntelliSense pro vytváření kódu HTML a Razor značek
To je v ostrém kontrastu s pomocnámi prvky HTML, předchozím přístupem k vytváření značek v zobrazeních na Razor straně serveru. Pomocná zařízení značek v porovnání s pomocníky HTML podrobněji vysvětlují rozdíly. Podpora technologie IntelliSense pro pomocná zařízení značek vysvětluje prostředí IntelliSense. Dokonce i vývojáři, kteří mají Razor zkušenosti se syntaxí jazyka C#, jsou produktivnější pomocí pomocníků značek než psaní kódu jazyka Razor C#.
Způsob, jak zvýšit produktivitu a vytvořit robustnější, spolehlivější a udržovatelný kód s využitím informací dostupných jenom na serveru
Například historická mantra při aktualizaci imagí byla změna názvu image při změně image. Image by měly být z důvodů výkonu agresivně uložené v mezipaměti. Pokud nezměníte název image, riskujete, že klienti kopírují zastaralou kopii. V minulosti se po úpravě obrázku musel změnit název a každý odkaz na obrázek ve webové aplikaci je potřeba aktualizovat. Nejenže je to velmi pracné, je to také náchylné k chybám (můžete zmeškat odkaz, náhodně zadat nesprávný řetězec atd.). Integrovaná funkce ImageTagHelper to může provést automaticky. Může k názvu image připojit číslo verze, takže při každé změně image server automaticky vygeneruje novou jedinečnou ImageTagHelper verzi image. U klientů je zaručeno získání aktuální image. Tato odolnost a úspory pracovních sil jsou v podstatě bezplatné díky použití ImageTagHelper .
Většina integrovaných pomocných prvků značek cílí na standardní elementy HTML a poskytuje atributy elementu na straně serveru. Například element použitý <input> v mnoha zobrazeních ve složce Views/Account obsahuje asp-for atribut . Tento atribut extrahuje název zadané vlastnosti modelu do vykreslené html. Představte Razor si zobrazení s následujícím modelem:
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
Následující Razor kód:
<label asp-for="Movie.Title"></label>
Vygeneruje následující kód HTML:
<label for="Movie_Title">Title</label>
Atribut asp-for je k dispozici For vlastností v objektu LabelTagHelper . Další informace najdete v tématu Vytváření pomocníků značek.
Správa oboru pomocníka značek
Rozsah pomocníků značek je řízen kombinací znaku , a znaku @addTagHelper @removeTagHelper "!" pro odhlášení.
@addTagHelper z dostupných pomocníků značek
Pokud vytvoříte novou webovou ASP.NET Core s názvem AuthoringTagHelpers, přidá se do projektu následující soubor Views/_ViewImports.cshtml:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers
Direktiva @addTagHelper z dostupných pomocníků značek pro zobrazení. V tomto případě je soubor zobrazení Pages/_ViewImports.cshtml, který ve výchozím nastavení dědí všechny soubory ve složce a podsložkách Pages. zpřístupnění pomocníků značek. Výše uvedený kód používá syntaxi se zástupnými znaky (" ") k určení, že všechny pomocné objekty značek v zadaném sestavení * (Microsoft.AspNetCore.Mvc.TagHelpers) budou dostupné pro každý soubor zobrazení v adresáři views nebo podadresáři. První parametr za určuje pomocná rozšíření značek, které se mají načíst (pro všechny pomocné objekty značek používáme " ) a druhý parametr @addTagHelper * "Microsoft.AspNetCore.Mvc.TagHelpers" určuje sestavení obsahující pomocné objekty značek. Microsoft.AspNetCore.Mvc.TagHelpers je sestavení pro integrované ASP.NET Core značek.
Pokud chcete zveřejnit všechny pomocné objekty značek v tomto projektu (které vytvoří sestavení s názvem AuthoringTagHelpers), použijete následující:
@using AuthoringTagHelpers
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, AuthoringTagHelpers
Pokud váš projekt obsahuje s výchozím oborem názvů ( ), můžete zadat plně kvalifikovaný název EmailTagHelper AuthoringTagHelpers.TagHelpers.EmailTagHelper (FQN) pomocníka značky:
@using AuthoringTagHelpers
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper AuthoringTagHelpers.TagHelpers.EmailTagHelper, AuthoringTagHelpers
Pokud chcete do zobrazení přidat pomocný objekt značky pomocí FQN, musíte nejprve přidat FQN ( ) a pak název sestavení AuthoringTagHelpers.TagHelpers.EmailTagHelper (AuthoringTagHelpers). Většina vývojářů preferuje použití syntaxe * se zástupnými znaky . Syntaxe se zástupnými znaky umožňuje vložit zástupný znak " " jako * příponu v FQN. Například některý z následujících direktiv přinese v EmailTagHelper :
@addTagHelper AuthoringTagHelpers.TagHelpers.E*, AuthoringTagHelpers
@addTagHelper AuthoringTagHelpers.TagHelpers.Email*, AuthoringTagHelpers
Jak už bylo zmíněno dříve, přidáním direktivy do souboru @addTagHelper Views/_ViewImports.cshtml je pomocná rutina značek dostupná pro všechny soubory zobrazení v adresáři Zobrazení a podadresářích. Direktivu můžete použít v konkrétních souborech zobrazení, pokud chcete vyjádřit výslovný souhlas s tím, aby se pomocná funkce značek vystavil @addTagHelper pouze uvedená zobrazení.
@removeTagHelper odebere pomocné objekty značek.
Má stejné dva parametry jako a odebere dříve přidaný pomocná metoda @removeTagHelper @addTagHelper značky. Například při použití u konkrétního zobrazení se ze zobrazení odebere zadaný pomocník @removeTagHelper značek. Při @removeTagHelper použití v souboru Views/Folder/_ViewImports.cshtml se ze všech zobrazení ve složce odebere zadaný pomocná rutina značek.
Řízení oboru pomocná rutina značky pomocí souboru _ViewImports.cshtml
Do libovolné složky zobrazení můžete přidat soubor _ViewImports.cshtml a modul zobrazení použije direktivy z tohoto souboru i ze souboru Views/_ViewImports.cshtml. Pokud jste přidali prázdný soubor Views/ Home /_ViewImports.cshtml pro zobrazení, nebude se nic měnit, protože soubor Home _ViewImports.cshtml je sčítaný. Všechny direktivy, které přidáte do @addTagHelper souboru Views/ Home /_ViewImports.cshtml (které nejsou ve výchozím souboru Views/_ViewImports.cshtml), zpřístupní tyto pomocné rutina značek zobrazením pouze ve Home složce.
Odhlášení z jednotlivých prvků
Pomocný prvek značky můžete zakázat na úrovni elementu pomocí znaku pro odhlášení pomocníka značek (!). Například ověřování je zakázané v souboru pomocí znaku pro odhlášení Email <span> pomocníka značek:
<!span asp-validation-for="Email" class="text-danger"></!span>
U úvodní a ukončovací značky musíte použít znak pro pomocný znak značky. (Editor Visual Studio automaticky přidá znak odhlášení do ukončovací značky, když ho přidáte do úvodní značky). Po přidání znaku pro odhlášení se atributy elementu a pomocníka značek už nebudou zobrazovat v chouřejším písmu.
Explicitní @tagHelperPrefix použití pomocné pomoci značek pomocí příkazu
Direktiva umožňuje zadat řetězec předpony značky pro povolení podpory pomocníka značek a explicitní použití pomocné funkce @tagHelperPrefix značek. Do souboru Views/_ViewImports.cshtml můžete například přidat následující kód:
@tagHelperPrefix th:
Na obrázku kódu níže je předpona pomocných značek nastavená na , takže pouze prvky, které používají předponu, podporují pomocné prvky značek (elementy s podporou pomocných značek th: th: mají výrazné písmo). Elementy <label> <input> a mají předponu pomocných značek a jsou povolené pomocí pomocných značek, zatímco <span> element ne.

Stejná pravidla hierarchie, která platí pro @addTagHelper , platí také pro @tagHelperPrefix .
Samoobslužné pomocná zařízení značek
Mnoho pomocníků značek nelze použít jako samoukonné značky. Některé pomocné pomocníky značek jsou navržené tak, aby se uzavíraly vlastními značkami. Použití pomocné funkce značky, která není navržená tak, aby se uzavíral sama, potlačí vykreslený výstup. Když pomocný prvek značky zavřete, ve vykreslených výstupech se značka samo ukončuje. Další informace najdete v této poznámce v tématu Pomocníci značek vytváření.
C# v atributu nebo deklaraci pomocníků značek
Pomocníci značek nepovolují jazyk C# v oblasti deklarace atributu nebo značky elementu. Například následující kód není platný:
<input asp-for="LastName"
@(Model?.LicenseId == null ? "disabled" : string.Empty) />
Předchozí kód lze napsat takto:
<input asp-for="LastName"
disabled="@(Model?.LicenseId == null)" />
Podpora technologie IntelliSense pro pomocná rozšíření značek
Při vytváření nové webové ASP.NET Core aplikace v Visual Studio se přidá balíček NuGet Microsoft.AspNetCore. Razor . Tools". Toto je balíček, který přidává nástroje Pomocná služba značek.
Zvažte napsání elementu <label> HTML. Jakmile zadáte do <l editoru Visual Studio, IntelliSense zobrazí odpovídající prvky:

Nejenže získáte nápovědu HTML, ale pod ní ikonu @" symbol with " (<>).

Ikona identifikuje prvek jako cílený pomocnými objekty značek. Čisté elementy HTML (například fieldset ) zobrazují ikonu <> kódu.
Čistá značka HTML zobrazuje značku HTML (s výchozím barevným Visual Studio) hnědým písmem, atributy červeně a hodnoty <label> atributů modře.

Po zadání intellisense zobrazí seznam dostupných atributů HTML/CSS a atributů cílených na <label pomocnou podporu značek:

Dokončení příkazu IntelliSense umožňuje zadat klávesu TAB k dokončení příkazu s vybranou hodnotou:

Jakmile je atribut pomocník značek zadán, změní se písma značky a atributu. když použijete výchozí Visual Studio barevný motiv Blue nebo Light, písmo je tučně fialové. Pokud používáte motiv "tmavý", písmo je tučně šedozelená. Obrázky v tomto dokumentu byly pořízeny pomocí výchozího motivu.

můžete zadat zástupce Visual Studio CompleteWord (Ctrl + mezerník je výchozí hodnota uvnitř dvojitých uvozovek ("") a teď jste v jazyce c#, stejně jako byste byli ve třídě c#. IntelliSense zobrazí všechny metody a vlastnosti v modelu stránky. Metody a vlastnosti jsou k dispozici, protože typ vlastnosti je ModelExpression . Na obrázku níže upravujeme Register zobrazení, takže RegisterViewModel je k dispozici.

IntelliSense zobrazí seznam vlastností a metod, které jsou k dispozici pro model na stránce. Bohatá prostředí IntelliSense vám pomůže vybrat třídu CSS:


Tagování pomocníků v porovnání s pomocníky HTML
Přihlaste se k prvkům jazyka HTML v Razor zobrazeních, zatímco pomocníky HTML jsou vyvolány jako metody s HTML v Razor zobrazeních. Vezměte v úvahu následující Razor kód, který vytvoří popisek HTML s nadpisem CSS třídy "titulek":
@Html.Label("FirstName", "First Name:", new {@class="caption"})
Symbol on ( @ ) oznamuje, Razor že se jedná o začátek kódu. Následující dva parametry ("FirstName" a "first name": ") jsou řetězce, takže IntelliSense nemůže pomáhat. Poslední argument:
new {@class="caption"}
Je anonymní objekt, který slouží k reprezentaci atributů. Protože class je klíčové slovo rezervované v jazyce C#, použijete @ symbol k vynucení interpretace jazyka c# @class= jako symbolu (název vlastnosti). Do předkoncového návrháře (někdo známý s HTML/CSS/JavaScriptem a jinými klientskými technologiemi, ale není známý v jazyce C# a Razor ), je většina řádku cizí. Celý řádek musí být vytvořen bez usnadnění z IntelliSense.
Pomocí LabelTagHelper lze napsat stejné označení jako:
<label class="caption" asp-for="FirstName"></label>
v případě pomocné verze značek, jakmile zadáte <l v editoru Visual Studio, IntelliSense zobrazí vyhovující prvky:

Technologie IntelliSense vám pomůže napsat celý řádek.
následující obrázek kódu ukazuje formu zobrazení /účtu/registru. cshtml Razor vygenerovaného ze šablony ASP.NET 4.5. x MVC, která je součástí Visual Studio.

editor Visual Studio zobrazuje kód jazyka C# s šedým pozadím. Například AntiForgeryToken Pomocník HTML:
@Html.AntiForgeryToken()
se zobrazí se šedým pozadím. Většina značek v zobrazení registrů je C#. Porovnejte je s ekvivalentním přístupem pomocí pomocníků značek:

Značky jsou mnohem čisticí a snadněji se čtou, upravují a udržují než přístup k HTML pomocníkům. Kód jazyka C# se zmenší na minimum, o které server potřebuje znát. editor Visual Studio zobrazí označení cílené pomocí pomocníka značek v charakteristickém písmu.
Vezměte v úvahu tuto e-mailovou skupinu:
<div class="form-group">
<label asp-for="Email" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Email" class="form-control" />
<span asp-validation-for="Email" class="text-danger"></span>
</div>
</div>
Každý z atributů ASP-má hodnotu "E-mail", ale "E-mail" není řetězec. V tomto kontextu je "e-mailem" vlastnost výrazu modelu C# pro RegisterViewModel .
editor Visual Studio vám pomůže napsat všechny značky v metodě pomocníka značek ve formuláři register, zatímco Visual Studio neposkytuje nápovědu pro většinu kódu v přístupu k nápovědě HTML. podpora technologie IntelliSense pro pomocné pomocníky značek se dohlíží na podrobnosti o práci s pomocníky značek v editoru Visual Studio.
Porovnávání pomocníků značek v porovnání s ovládacími prvky webového serveru
Pomocníka značek nevlastní prvek, ke kterému jsou přidruženy; jednoduše se účastní vykreslování prvku a obsahu. ASP.NET Ovládací prvky webového serveru jsou deklarovány a vyvolány na stránce.
ASP.NET Ovládací prvky webového serveru mají netriviální životní cyklus, který může provádět vývoj a ladění obtížné.
Ovládací prvky webového serveru umožňují přidat funkce do prvků model DOM (Document Object Model) klienta (DOM) pomocí ovládacího prvku klienta. Pomocník značek nemá žádný model DOM.
Ovládací prvky webového serveru zahrnují automatické zjišťování prohlížečů. Pomocník značek nemá žádné znalosti o prohlížeči.
Více pomocných rutin značek může působit na stejný prvek (viz téma zamezení konfliktů pomocníka značek ), zatímco obvykle nelze vytvářet ovládací prvky webového serveru.
Pomocník značek může upravit značku a obsah prvků HTML, na které jsou vymezeny, ale přímo na stránku nemění nic jiného. Ovládací prvky webového serveru mají méně konkrétní rozsah a mohou provádět akce, které mají vliv na ostatní části stránky. povolení nezamýšlených vedlejších účinků.
Ovládací prvky webového serveru používají k převodu řetězců do objektů převaděče typů. U pomocníků se značkami pracujete nativně v jazyce C#, takže nemusíte provádět převod typu.
Ovládací prvky webového serveru používají System. ComponentModel k implementaci chování komponent a ovládacích prvků za běhu a v době návrhu.
System.ComponentModelzahrnuje základní třídy a rozhraní pro implementaci atributů a převaděčů typů, vázání na zdroje dat a součásti licencování. Na rozdíl od toho, že chcete označit pomocníky, které jsou obvykle odvozeny zTagHelperaTagHelperzákladní třída zpřístupňuje pouze dvě metodyProcessaProcessAsync.
Přizpůsobení písma prvku pomocné značky
Písma a barvy můžete přizpůsobit v nabídce nástroje > Možnosti > prostředí > a barvy:

Integrované pomocné ASP.NET značek Core
Ukotvení pomocná nápověda značky
Pomocná nápověda značek mezipaměti
Pomocná nápověda značky komponenty
Pomocná služba značek distribuované mezipaměti
Pomocná proměnná značky prostředí
Pomocná nápověda značky formuláře
Pomocná nápověda značky akce formuláře
Pomocná nápověda značky obrázku
Pomocná nápověda značky vstupu
Pomocná nápověda značky popisku
Pomocná nápověda značky odkazu
Pomocná nápověda značky skriptu
Pomocná nápověda značky textové oblasti
Pomocná metoda značky ověřovací zprávy
Pomocná metoda značky souhrnu ověření
Další zdroje informací
- Vytváření pomocníků se značkami
- Práce s formuláři
- TagHelperSamples v GitHub obsahuje ukázky pomocníka značek pro práci s Bootstrap.