Sie sind hier:
Lexikon/Glossar
Telefon (Mo-Fr 9-16 Uhr):
0201/649590-0
|
Kontaktformular
MENU
Start
Hauptseite
Angebote im Überblick
Kernkompetenzen
Softwareentwicklung
Beratung
Firmen-Schulungen
Offene Seminare
Online-Maßnahmen
Vorträge
Coaching
Support
Fachbücher
Fachartikel
Konditionen
Themen
Kernkompetenzen
Aktuelle Themen
Web & Cloud
Apps / Mobilplattformen
Benutzeroberflächen / User Experience
.NET
JavaScript / TypeScript
Java
Programmiersprachen
Entwicklungswerkzeuge
Scripting
Softwareengineering
Datenbanken / Reporting / BI
Betriebssysteme & Virtualisierung
Microsoft Server-Produkte
Windows & Office für Anwender
Soft Skills & IT-Recht
Beratung
Beratungsthemen
Coaching
Softwareentwicklung
Technischer Support
Unsere Top-Berater
Referenzkunden
Angebotsanfrage
Individuelle Schulungen
1026 Schulungsthemen
Agendakonfigurator
Weiterbildungsphilosophie
Didaktische Konzepte
Vor Ort oder online
Unsere Top-Trainer
Referenzkunden
Teilnehmerfeedback
Angebotsanfrage
Offene Seminare
.NET-Akademie
.NET/C#-Basisseminar
WPF
WinUI
.NET MAUI
Blazor
ASP.NET WebAPI & gRPC
Entity Framework Core
Unit Testing / TDD
PowerShell
Infotage
Wissen
Übersicht
Fachbücher
Fachartikel
Konferenzvorträge
Konferenzen/Events
Spickzettel
Lexikon/Glossar
Programmcodebibliothek
Versionshistorie
Weblog
Downloads
Newsletter
Community-/Leserportal
Registrierung
.NET/C#/Visual Studio
.NET 10.0
.NET 9.0
.NET 8.0
ASP.NET (Core)/Blazor
PowerShell
Über uns
Kontakt
Selbstdarstellung
Kernkompetenzen
Dr. Holger Schwichtenberg
Top-Experten
Leitung & Kundenteam
Referenzkunden
Kundenaussagen
Referenzprojekte
Partner
Konditionen
Stellenangebote
Weitere Websites
Impressum
Datenschutzerklärung, Haftung, Urheberrecht, Barrierefreiheit
Suche
Themenkatalog
Tag Cloud
Volltextsuche
Site Map
FAQs
Erklärung des Begriffs: Tag Helper
Zur Stichwortliste unseres Lexikons
Was ist
Tag Helper
?
Tag Helper sind Tags oder
Attribut
e für Tags in
Razor
Template
s, die von
ASP.NET Core
auf der Serverseite vor der Auslieferung der Website durch andere Tags oder Eigenschaften ersetzt werden. Tag Helper kann ein Webentwickler in Views (bei
ASP.NET Core
Model-View-Controller –
MVC
) oder in Pages (bei
ASP.NET Core
Razor
Pages) einsetzen.
Dies ist vergleichbar mit den
Direktive
n in
Angular
; allerdings übersetzt
Angular
die
Direktive
n clientseitig (also erst im Browser) in Standard-HTML-Tags. Tag Helper nehmen eine ähnliche Rolle ein wie früher die
Webserver
steuerelemente in ASP.NET
Webforms
, sind aber in ihrer Implementierung wesentlich einfacher. Eine Entwurfszeitansicht gibt es hier nicht. Tag Helpers können sich auch auf Standard-HTML-Tags beziehen und diese modifizieren.
Vordefinierte Tag Helper
Microsoft liefert bereites eine Reihe eigener Tags, z.B.
<partial>
<cache> und
<environment>
sowie Tag-
Attribut
e (die mit der Vorsilbe "asp-" beginnen), z.B.
asp-controller und asp-action for <form>
asp-for für <label>, <input> und <select>
asp-append-version für <img>
asp-validation-for für <span>
in
ASP.NET Core
in der Microsoft.AspNetCore.Mvc.TagHelpers.dll mit.
Damit diese Tag Helper überhaupt nutzbar sind, müssen Sie mit @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers eingebunden werden. Dies erledigt Microsoft freundlicherweise in den Projektvorlage "Web Application" und "Web Application (
MVC
)" schon in der Datei /Shared/_ViewImports.cshtml, die automatisch für jeden View geladen wird.
Listing 1 zeigt Tags mit "asp-" beginnenden Erweiterungsattributen (asp-for, asp-append-version, usw). Microsoft nennt diese Erweiterungsattribute sowie eigenständigen neue Tags wie <environment> und <cache> in Listing 1 "Tag Helper". Sie sind eine elegante Alternative zu den bisherigen
HTML Helper
-Funktionen (z.B. @Html.
TextBox
For()), die es aber auch weiterhin gibt. Im Einzelnen bieten die in Listing 1 verwendeten Tag Helper folgende Funktionen:
asp-for:
Datenbindung
an ein
Property
aus dem Modell
asp-append-version: Anhängen eines
Hash
-Wertes für die Datei, der sich jedes Mal ändert, wenn sich die Datei ändert. So wird verhindert, dass der Benutzer wegen
Caching
im Browser nicht die aktuelle Datei sieht (Cache Busting).
<cache>: Zwischenspeicherung des Inhalts für die bei expires-after angegebene Zeitdauer.
<environment>: Ausgabe nur, wenn einer der Names genannten Umgebungen aktiv ist. Den Namen für die aktive Umgebung legt man in der Umgebungsvariablen ASPNETCORE
ENVIRONMENT fest. Mit diesem Tag Helper definiert Microsoft in der Standardlayoutvorlage in der Datei /Shared/
Layout.html, dass in den Umgebungen "Staging" und "Produktion", die Bootstrap-
CSS
-Datei im Standard aus dem
Content Delivery Network
(
CDN
) von Microsoft kommt.
Es gibt weitere eingebaute Tag Helper in der
Komponente
Microsoft.AspNetCore.Mvc.TagHelpers.dll. Damit die Tag Helper überhaupt nutzbar sind, müssen Sie mit @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers eingebunden werden. Dies erledigt Microsoft freundlicherweise in der Projektvorlage schon in der Datei /Shared/_ViewImports.cshtml, die automatisch für jeden View geladen wird.
Listing 1: Eingebaute Tag Helper
@model ITVisions.Autor
<html>
<h3>Autor #@Model.ID: @Model.Name</h3>
<img width="50" src="~/images/Foto_@(Model.Name.Replace(" ","")+".jpg")" asp-append-version="true" />
<input asp-for="Name" class="form-control" />
...
<div>
<cache expires-after="@TimeSpan.FromMinutes(10)">
Zuletzt aktualisiert @DateTime.Now.ToString().
</cache>
Dies ist die
<environment names="development">
Entwicklungsumgebung
!</environment>
<environment names="test1,test2">Testumgebung!</environment>
<environment names="produktion">Produktionsumgebung!</environment>
</div>
</html>
Eigene Tag Helper
Natürlich kann der Softwareentwickler eigene Tag Helper schreiben. Dazu erstellt er eine öffentliche Klasse, die von Microsoft.AspNetCore.
Razor
.TagHelpers.TagHelper erbt. Der Name der Klasse sollte konventionsgemäß auf TagHelper enden. Der vordere Teil wird dann zum Tagnamen, wobei Kebab
Casing
(alias Spinal
Casing
) Anwendung findet, d.h.
Aus der Klasse AutorTagHelper entsteht das Tag <autor>
Aus der Klasse DateTimeTagHelper entsteht das Tag <date-time/>
Wenn man einen anderen Tagnamen wünscht oder nicht ein eigenständiges Tag, sondern nur ein neues
Attribut
für ein bestehendes Tag definieren will, muss man die
Annotation
[HtmlTargetElement] verwenden.
Eine Tag Helper-Klasse kann öffentliche Properties anbieten, die zu Tag-
Attribut
en werden. Die Klasse überschreibt entweder die
Methode
n Process() oder ProcessAsync(). Diese
Methode
n erhalten im
Methode
nparameter über ein TagHelperContext-
Objekt
den aktuellen Elementnamen und Taginhalt; sie geben über das ebenfalls per Parameter übergebene
Objekt
TagHelperOutput den aktualisierten Inhalt zurück.
Die
Methode
nsignatur ist also entweder:
public override void Process(TagHelperContext context, TagHelperOutput output)
{
}
oder:
public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
}
Die asynchrone Variante ist aus Gründen der besseren skalierbarkeit zu beveorzugen.
Einbindung der eigenen Tag Helper
Voraussetzung für das Funktionieren aller hier dargestellten Tag Helper ist, dass die Tag Helper mit @addTagHelper einbindet. Wenn die Tag Helper in dem Namensraum ITVisions und in der
DLL
-
Assembly
ITVTagHelper liegen, muss die Einbindung so erfolgen:
Einzelner Tag Helper
@addTagHelper "ITVisions.AutorTagHelper, ITVTagHelper" eingebunden
Alle Tag Helper in einem Namensraum
@addTagHelper "ITVisions*, ITVTagHelper"
Alle Tag Helper in einer
Assembly
@addTagHelper "*, ITVTagHelper"
Beispiel
Listing 2 zeigt das Beispiel des Tag Helpers <Autor>, das ein Autor-
Objekt
und eine Zahl (Size) als
Attribut
e besitzt und daraus eine Ausgabe in einem HTML-Header-Tag (<h1>, <h2>, <h3> usw.) erzeugt.
Somit kann man nun mit dem neuen Tag Helper anstelle von
<h3>Autor #@Model.ID: @Model.Name</h3>
die gekapselte Form verwenden:
<Autor size="3" autor="Model"></Autor>
sofern man vorher das Tag mit @addTagHelper "ITVisions.AutorTagHelper, ITVTagHelper" eingebunden hat, wobei der erste Parameter der Klassennamen und der zweite Parameter der
Assembly
name ist. Anstelle des Klassennamens kann man auch mit * alle Tag Helper einer
Assembly
einbinden.
Listing 2: Implementierung eines Tag Helpers für das eigene Tag <Autor>
using System;
using WindowsDeveloper;
using Microsoft.AspNetCore.
Razor
.TagHelpers;
namespace ITVisions
{
/// <summary>
/// Tag Helper <Autor autor="objekt" size="zahl 1 bis 5"></Autor>
/// </summary>
public class AutorTagHelper : TagHelper
{
/// <summary>
/// Komplexes
Objekt
als Parameter
/// </summary>
public Autor Autor { get; set; }
/// <summary>
/// Zahl als Parameter
/// </summary>
public byte Size { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (Size > 5) Size = 5;
output.TagName = "h" + Size.ToString();
output.Content.SetContent(
$@"Autor #{Autor.ID}: {Autor.Name}");
output.TagMode = TagMode.StartTagAndEndTag;
}
}
}
Querverweise zu anderen Begriffen im Lexikon
Content Delivery Network (CDN)
Entwicklungsumgebung
Datenbindung
ASP.NET Core
HTML Helper
Annotation
Komponente
Direktive
Webserver
Property
Assembly
Template
Attribut
Webforms
Methode
Angular (NG)
TextBox
Caching
Objekt
Casing
Razor
Hash
Cascading Style Sheet (CSS)
Mode-View-Controler Framework (MVC)
Dynamic Link Library (DLL)
Content Delivery Network (CDN)
Beratung & Support
Anfrage für Beratung/Consulting zu TAG HELPER
Gesamter Beratungsthemenkatalog
Technischer Support zum TAG HELPER
Schulungen
ASP.NET Core 8.0/9.0/10.0: komplettes Wissen - mit MVC, Razor Pages, Blazor, WebAPIs und gRPC
ASP.NET Model View Controller (ASP.NET MVC) und ASP.NET WebAPI für ASP.NET MVC 5.x oder ASP.NET MVC Core 8.0/9.0/10.0
Umstieg auf ASP.NET Core 8.0/9.0/10.0-Webanwendungen in .NET 8.0/9.0/10.0 (Umstellung/Migration von klassischen ASP.NET-Webanwendungen auf ASP.NET Core)
Umstieg von .NET-Desktop-Entwicklung (WPF/Windows Forms) auf Webentwicklung (ASP.NET/ASP.NET Core + JavaScript/TypeScript mit Webframeworks wie Angular, Vue.js oder React)
Anfrage für eine individuelle Schulung zum Thema TAG HELPER
Gesamter Schulungsthemenkatalog
Fachbücher
Blazor 10.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 10.0, C# 14.0 und Visual Studio 2026
C# 14.0 Crashkurs
Moderne Datenzugriffslösungen mit Entity Framework Core 10.0
.NET 10.0 Update: Die Neuerungen in .NET 10.0 gegenüber .NET 9.0
Blazor 9.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 9.0, C# 13.0 und Visual Studio 2022
C# 13.0 Crashkurs
Cross-Plattform-Apps mit .NET MAUI entwickeln
Moderne Datenzugriffslösungen mit Entity Framework Core 9.0
.NET 9.0 Update: Die Neuerungen in .NET 9.0 gegenüber .NET 8.0
PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch
.NET 8.0 Update: Die Neuerungen in .NET 8.0 gegenüber .NET 7.0
Concurrency with Modern C++: What every professional C++ programmer should know about concurrency
C++20: Get the Details
Blazor 8.0: Moderne Webanwendungen und hybride Cross-Platform-Apps mit .NET 8.0, C# 12.0 und Visual Studio 2022
Moderne Datenzugriffslösungen mit Entity Framework Core 8.0
C# 12.0 Crashkurs
App-Entwicklung für Mobile und Desktop: Software Engineering mit .NET MAUI und Comet für iOS, Android, Windows und macOS
Cross-Plattform-Apps mit .NET MAUI entwickeln
Blazor 7.0: Blazor WebAssembly, Blazor Server und Blazor Hybrid
C# 11.0 Crashkurs
Moderne Datenzugriffslösungen mit Entity Framework Core 7.0
PowerShell 7 und Windows PowerShell 5 – das Praxishandbuch
C++ Core Guidelines Explained: Best Practices for Modern C++
App Engineering: SwiftUI, Jetpack Compose, .NET MAUI und Flutter
Vue.js 3 Crashkurs
Moderne Datenzugriffslösungen mit Entity Framework Core 6.0
Blazor 6.0: Blazor WebAssembly, Blazor Server und Blazor Desktop
C# 10.0 Crashkurs
Cross-Plattform-Apps mit Xamarin.Forms entwickeln
Developing Web Components with TypeScript: Native Web Development Using Thin Libraries
Alle unsere aktuellen Fachbücher
E-Book-Abo für ab 99 Euro im Jahr